具有self和Many2oe场的Odoo12ce域问题

2024-09-27 19:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在开发一个odoo12ce模块,该模块必须包含一个表,其中包含狗的注册信息以及狗的父亲和母亲(类似于纯种狗)。在现场,我只想得到公狗和住在同一个城市的狗

get_domain_male(self):
  return [('gender', '=', 'male'), ('city', '=', self.city)]

father_code = fields.Many2one('asc.dog', string="Fathers code", domain = get_domain_male)

asc.dog是同一个模型,这意味着该模型是自动引用的

当我运行代码段时,城市已经设置好,字段没有显示任何内容,因为self没有按预期识别。当我打印它时,它只是False,代码在我进入表单视图之前运行

代码可能有什么问题,还有其他过滤方法吗?? 提前感谢你的帮助


Tags: 模块代码模型self信息citygetdomain
2条回答

来自奥多documentation

domain – an optional domain to set on candidate values on the client side (domain or string)

所以,基本上您可以将domain设置为字符串或元组列表,在这种情况下,您可以使用字符串来设置如下域

father_code = fields.Many2one('asc.dog', string="Fathers code", 
  domain ="[('gender', '=', 'male'), ('city', '=', city)]")

因此,它将从客户端或视图获取城市值,并相应地过滤asc.dog记录。当然,要从客户端获取值,city字段必须存在于视图中,否则它将生成错误field not found in the view

或者,您也可以在视图定义中设置域,而不是在字段定义中设置domain

<field name='city' />
<field name='father_code' domain="[('gender','=','male'),('city','=',city)]" />

唯一的区别是,如果在字段定义中执行此操作,则由father_code组成的每个视图将始终自动设置此域,但必须包括city,可见或不可见

在这里,我们使用一个onchange字段,以便在父字段更改时过滤dog字段

通过循环记录来避免单例和相关问题几乎总是很重要的

@ api.onchange('father_code')
    def _onchange_father_code_filter_dog(self):
        for rec in self:
            return {'domain':
                    {'dog_field': [('gender', '=', 'male'), ('city', '=', rec.city)]}}

相关问题 更多 >

    热门问题