【问题标题】:How to write conditionally odoo domain?如何有条件地编写odoo域?
【发布时间】:2016-11-15 21:02:21
【问题描述】:

如果 a 字段不为 False,我想申请一个 odoo 域。

['|',('versions_ids', '=', version_id),(False, '=', version_id)]

像我写的域抛出这个错误

TypeError: unhashable type: 'list'

编辑:

对象扩展:

class sale_order_line(models.Model):
    _inherit = 'sale.order.line'

    version_id = fields.Many2one('product_cars_application.version',string='Version')

视图扩展

<record id="sale_cars_append" model="ir.ui.view">
            <field name="name">sale.order.form</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <xpath expr="." position="inside">
                    <script type='text/javascript' src='/product_cars_application/static/src/js/filter.js'></script>
                </xpath>

                <xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="before">
                    <!-- <button name="product_search" type="action" class="oe_highlight" icon="fa-car" /> -->
                    <field name="version_id"/>
                </xpath>
                <xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
                    <attribute name = "domain">['|',('versions_ids', '=', version_id),(False, '=', version_id)]</attribute>
                </xpath>
            </field>
        </record>

【问题讨论】:

  • 如果您不介意提供更多上下文。显示定义域的代码(不仅仅是域)。显示调用你的函数的字段定义。
  • @Phillip Stack 编辑添加上下文
  • 我见过这样的事情。 version_ids 是一个列表,version_id 是一个 int 或 False。 list int 比较可能是一个问题。将 version_id 包裹在列表 `('versions_ids', '=', [version_id])
  • 也使用in而不是=
  • 域的第一部分工作正常。 ('versions_ids'、'='、version_id)。但是如果我只在version_id为False的情况下使用它,它只显示versions_ids = False的产品,我想显示所有

标签: openerp odoo-8 odoo-view


【解决方案1】:

试试下面的。

<xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
    <attribute name = "domain">['|',('version_ids', '=', version_id),('version_ids','=',False),'|',('version_id','=',False)]</attribute>
</xpath>

【讨论】:

  • 域的第一部分工作正常。 ('versions_ids'、'='、version_id)。但是如果我只在version_id为False的情况下使用它,它只显示versions_ids = False的产品,我想显示所有
  • 我会修改我的建议。
  • 我经常发现这些域是一个不直观的过程。我认为如果您将 OR 运算符放在第一个元组的前面,解析器期望第二个元组是第一个元组中第一个叶子的替代值。所以你可能想把|放在你的第一个元组之后。
【解决方案2】:

应该是这样的,

<xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
    <attribute name = "domain">['|',('version_ids', '=', version_id),('version_ids','=',False)]</attribute>
</xpath>

域的另一种选择。

['|',('version_ids', '=', version_id),('version_ids','=',[(6,False,[])])]

【讨论】:

  • 这将显示带有 sales.order.line.version_id 的产品在 sales.order.line.product_id.versions_ids 以及 sales.order.line.product_id.versions_ids = False ...我需要show: If "version_id" not False show "sales.order.line.version_id" is in "sales.order.line.product_id.versions_ids"
  • 如果版本号为假怎么办?
  • 我需要申请域名,前提是 version_id 不为 false。在 python 中会。 if version_id: domain = [('version_ids', '=', version_id)] else: domain = [] 你的代码如果 version_id 被定义,显示产品哪个version_ids = False,我只需要显示product_id.versions_ids = version_id
猜你喜欢
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
相关资源
最近更新 更多