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

时间:2019-08-05 09:43:37

标签: odoo odoo-12

在我的模型中,我有一个计算字段,该字段提供了该用户的有效合约的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>

问题是我无法理解如何在操作的域/上下文中将id_ultimocontrat传递给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)?

1 个答案:

答案 0 :(得分:1)

您可以使用以下按钮代码

<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:应该是您在其中编写了操作的模块。   域:您要指定的域。

您可以给整数字段不存储,如下所示:

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>