【问题标题】:Field invisible based on parent field Odoo 8基于父字段Odoo 8的字段不可见
【发布时间】:2016-07-26 05:28:33
【问题描述】:

我需要根据父字段隐藏一列 one2many 字段。 通过继承 account.invoice 模型,我添加了一个字段 inv_type。如果 inv_type = 'utility',我需要在 account_invoice_line 中设置不可见字段 'quantity'。

我试过下面的代码:

xml:

<record id="ams_invoice_form" model="ir.ui.view">
        <field name="name">account.invoice.form</field>
        <field name="model">account.invoice</field>
        <field name="inherit_id" ref="account.invoice_form"></field>
        <field name="inherit_id" ref="ams.3e_invoice_form"></field>
        <field name="arch" type="xml">
            <xpath expr="//notebook/page/field/tree/field[@name='quantity']" position="replace">
                <field name="quantity"  attrs="{'invisible':[('parent.inv_type,'=','utility')]}" />
                <field name="consumed_unit"/>
                <field name="fixed_charge"/>
            </xpath>

        </field>
    </record>

它抛出一个客户端错误:

 Odoo Client Error

 Error: Unknown field parent.invoice_type in domain [["parent.invoice_type","=","utility"]]

请提出解决方案..谢谢..

【问题讨论】:

    标签: python filter one-to-many odoo-8 invisible


    【解决方案1】:

    真的很复杂,建议您可以使用适用于 odoo 9 的属性:

    <record id="ams_invoice_form" model="ir.ui.view">
            <field name="name">account.invoice.form</field>
            <field name="model">account.invoice</field>
            <field name="inherit_id" ref="account.invoice_form"></field>
            <field name="inherit_id" ref="ams.3e_invoice_form"></field>
            <field name="arch" type="xml">
                <xpath expr="//notebook/page/field/tree/field[@name='quantity']" position="replace">
                    <field name="quantity" invisible="context.get('ok_invisible', False)"/>
                    <field name="consumed_unit"/>
                    <field name="fixed_charge"/>
                </xpath>
    
            </field>
        </record>
    

    在发票模块中它必须影响fields_view_get函数,我知道你想隐藏发票产品列表的列,所以它必须影响account.invoice.line对象:

    class AccountInvoiceLine(models.Model):
    
          _inherit = "account.invoice.line"
    
          @api.model
          def fields_view_get(self, view_id=None, view_type=False, toolbar=False, submenu=False):
              if self.invoice_id.inv_type == 'utility':
                 self = self.with_context(ok_invisible=True)
              else:
                 self = self.with_context(ok_invisible=False)
    
              return super(AccountInvoiceLine, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
    

    【讨论】:

      【解决方案2】:

      在 Odoo 8.0 中,我不得不稍微实现它。它具有相同的逻辑,但我必须使用 sale.order 的 fields_view_get 方法,并且需要从其标识符加载订单:

      class SaleOrder(models.Model):
          _inherit = 'sale.order'
      
          @api.model
          def fields_view_get(self, view_id=None, view_type=False, toolbar=False,
                              submenu=False):
              order = False
              params = self.env.context.get('params', False)
              if params:
                  order_id = params.get('id', False)
                  if order_id:
                      order = self.browse(order_id)
      
              if order and not order.is_agreement:
                  self = self.with_context(hide_agreement_cols=False)
      
              result = super(SaleOrder, self).fields_view_get(
                  view_id=view_id, view_type=view_type,
                  toolbar=toolbar, submenu=submenu
              )
              return result
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多