如何在智能按钮的域操作中获得计算字段的值

How to have a compute field's value in domain action of a smart-button

在我的模型中,我有一个计算字段,它给出了该用户的活动合同的 ID:

id_ultimo_contratto = fields.Integer(compute="_compute_last_contratto", store=True)

这是我用来计算 ID 的函数(它是正确的,我有正确的值):

@api.multi
@api.depends()
def _compute_last_contratto(self):
    id_utenza=self.id
    contratto_attivo = ''   
    for AttivitaSvoltaEE in self.env['utilitypower.attivitasvolta_ee'].search([('id_utenza_ee','=',id_utenza)]):
        id_attivita = AttivitaSvoltaEE.id
        for Contratto in self.env['utilitypower.contratti_ee'].search([('attivitasvolte_ids','=',id_attivita)]):
            if Contratto.stato==1:
               #find it :
               id_contratto_attivo = Contratto.id
               id_ultima_attivita = id_attivita
               contratto_attivo=Contratto.nome_contratto               
    for UtenzeEE in self:
        UtenzeEE.last_contratto = contratto_attivo
        UtenzeEE.id_ultimo_contratto = id_contratto_attivo
        UtenzeEE.id_ultima_attivita = id_ultima_attivita

我在智能按钮中使用此 ID,我想通过智能按钮上链接的操作打开合同视图:

<button class="oe_stat_button" 
         icon = "fa-file-text-o" 
         type = "action" 
         name="action_view_contrattoattivo_ee" 
         options="{}"> 
            <span><field name="id_ultimo_contratto"/></span> 
</button>

问题是我无法理解如何在操作的 domain/context 中传递 id_ultimocontratto field_value:

<act_window id="action_view_contrattoattivo_ee" 
            name="Contratto Attivo"
            res_model="utilitypower.contratti_ee"
            view_type="tree,form"
            view_mode="tree"
            domain="[]"
/>

如何将计算字段传递到域中?以及如何参考最终模型的 ID (odoo)?

您可以使用下面的按钮代码

<button class="oe_stat_button" 
     icon = "fa-file-text-o" 
     type = "object" 
     name="action_view_contrattoattivo_ee" 
     options="{}"> 
        <span><field name="id_ultimo_contratto"/></span> 

在py文件中写下代码

      @api.multi
      def action_view_contrattoattivo_ee(self):

        action = self.env.ref('module_name.action_view_contrattoattivo_ee')
        result = action.read()[0]
        result['domain'] = domain
        return result

module_name:应该是你写动作的模块。 域:您要指定的域。

你可以给整数字段 non store 如下:

id_ultimo_contratto = fields.Integer(compute="_compute_last_contratto")

@api.multi
def _compute_last_contratto(self):
    id_utenza=self.id
    contratto_attivo = ''   
    for AttivitaSvoltaEE in self.env['utilitypower.attivitasvolta_ee'].search([('id_utenza_ee','=',id_utenza)]):
        id_attivita = AttivitaSvoltaEE.id
        for Contratto in self.env['utilitypower.contratti_ee'].search([('attivitasvolte_ids','=',id_attivita)]):
            if Contratto.stato==1:
               #find it :
               id_contratto_attivo = Contratto.id
               id_ultima_attivita = id_attivita
               contratto_attivo=Contratto.nome_contratto               
    for UtenzeEE in self:
        UtenzeEE.last_contratto = contratto_attivo
        UtenzeEE.id_ultimo_contratto = id_contratto_attivo
        UtenzeEE.id_ultima_attivita = id_ultima_attivita

请注意,如果您通过按钮调用任何操作,则必须编写如下代码

<button class="oe_stat_button" 
     icon = "fa-file-text-o" 
     type = "action" 
     name="%(action_view_contrattoattivo_ee)d" 
     options="{}"> 
        <span><field name="id_ultimo_contratto"/></span>