字段中domain的用法



  • 代码如下:

    class PartOption(models.Model):
        _name = 'part.option'
        parent_id = fields.Many2one('part.option', string='Parent Option')
    
    class RobotProtectionType(models.Model):
        _name = 'robtype'
        _description = 'Rob Type'
      
        option_id = fields.Many2one('part.option', string='Part Option', required=True, domain="[('parent_id','=', False)]")
    

    问题:
    1、在option_id字段中有个domain筛选,domain要表达的含义是parend_id不为空的意思吗?如果是,那么这样表达是否包含了"",None,Null的三种情况?
    2、如果真的需要判断某个字段为假,又怎样用domain表示?

    新人一枚,请大家指教。


  • 管理员

    问题:
    1、在option_id字段中有个domain筛选,domain要表达的含义是parend_id不为空的意思吗?如果是,那么这样表达是否包含了"",None,Null的三种情况?

    这Domain的意思是part.option这个模型中parent_id为空的记录,如果parent_id是Odoo ORM定义的字段(例如:many2one),要判断该字段是否为空只需要[('fields_xx', '=', False)]



  • @Joshua
    parent_id不是odoo字段,是自定义的类的字段。[('fields_xx', '=', False)]这个跟我代码中的domain="[('parent_id','=', False)]"是一样的吧



  • 首先,要分清"", None,Null的含义, 如果是在python端,它是没有Null的说法。 ""是有值的: 表示该字段值为空字符, 一定要分清值为空和值为空字符的区别。 None是该字段未赋值,None在数据库端表现为对应的Column值为Null(为空)。

    另外,domain="[('parent_id','=', False)]"意思是:筛选出父表PartOption(ORM, class PartOption默认转为table PartOption)中parent_id为空(未赋值)的记录 (parent_id为空字符不能算,虽然人眼看不见), 如果form view中有 field name="option_id" />, 它会是一个下拉列表,显示的内容是筛选出的记录的 name列的值(默认)。

    还有: 2、如果真的需要判断某个字段为假,又怎样用domain表示? 字段为假,说明该字段为Boolean, 比如说res_partner有is_company列, 在表中 is_company列值为 False或者为True,还是用 domain="[('is_company','=', False)]"。


  • 管理员

    @1234567 我说的Odoo定义的字段意思是通过Odoo ORM定义的字段。

    其他的感谢 @Felix_Cheng 已经解释的很清楚了。在Domain里面False,None都可以用作筛选未赋值。



  • @Felix_Cheng
    懂了,谢谢你。:sisi:



  • @Joshua
    谢谢你。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待