如何在 OpenERP/Odoo 上设置这个特定域?
How to set this specific domain on OpenERP/Odoo?
我在 Odoo 中有下一个 table,名为关系,它来自 table 女孩和 table 男孩之间的关系:
| girl_id | boy_id | relationship_type |
| 1 | 2 |朋友 |
| 1 | 3 |兄弟姐妹 |
| 2 | 7 |恋人 |
所以:
- 在table女孩中有一个字段关系,它是one2many
指向 table 关系。
- 在 table 男孩中有一个字段关系,它是一个 one2many
指向 table 关系。
- 在 table 关系中有两个字段,girl_id 和 boy_id,
都分别指向 table 的女孩和男孩。
场景:
在女孩和男孩的形式中存在场关系。当我为女孩或男孩添加新关系时,会打开一个表格来填写 table 关系(girl_id、boy_id 和 relationship_type)的字段。假设我是一个女孩,我点击添加新关系,然后打开了表格。我这样做是为了不看到 girl_id(它是不可见的,但它包含当前女孩的 ID)。所以我只能看到两个字段(boy_id 和 relationship_type)。
我想要的:
继续这个例子,如果我打开 boy_id 的下拉列表,我会看到所有男孩,甚至是那些已经与这个女孩有血缘关系的男孩。例如,如果我给 id 为 1 的女孩添加关系,我不能看到 id 为 2 和 3 的男孩,如果女孩是 id 2 的那个,我不能看到 id 为 7 的男孩。
我的尝试
我在 table 关系中创建了两个字段,名为 boys_of_the_girl(one2many 与 'girl_id.relationships' 相关)和 girls_of_the_boy(one2many 与 [=92= 相关) ]).
我的代码:(示例:为女孩建立关系)
<field name="girl_id" invisible="1"/>
<field name="boys_of_the_girl" invisible="1"/>
<field name="boy_id" domain="[('id', 'not in', boys_of_the_girl)]"/>
<field name="relationship_type"/>
错误:
RuntimeError: 调用 Python 对象时超出最大递归深度
有人能帮帮我吗?谢谢!
编辑
Table 男孩
relationships = fields.One2many(comodel_name='relationship',
inverse_name='boy_id',
string='Relationships')
Table 女孩
relationships = fields.One2many(comodel_name='relationship', inverse_name='girl_id', string='Relationships')
Table 关系
boy_id = fields.Many2one(comodel_name='boy', string='Boy', required=True)
girl_id = fields.Many2one(comodel_name='girl', string='Girl', required=True)
relationship_type = fields.Char(string='Relationship type')
嗯,最后我发现通过 XML 代码无法管理这个,但可以通过 Python:
达到同样的目的
只有这个功能(和另一个类似girl_id域的另一种形式):
@api.onchange('girl_id')
def on_change_girl_id(self):
current_girl_id = self.env.context.get('default_girl_id', False)
relationship_recordset = self.search([('girl_id', '=', current_girl_id)])
boy_recordset = relationship_recordset.mapped('boy_id')
boy_ids = boy_recordset.mapped('id')
boy_id_domain = [
('id', 'not in', boy_ids)
]
result = {
'domain': {
'boy_id': boy_id_domain,
},
}
return result
这样就不需要在 XML 表单的 boy_id 字段中添加任何域。这个函数会影响你为女孩设置关系的形式,正如我上面写的,必须声明另一个类似的函数来管理为男孩设置关系时的正确行为。
我在 Odoo 中有下一个 table,名为关系,它来自 table 女孩和 table 男孩之间的关系:
| girl_id | boy_id | relationship_type |
| 1 | 2 |朋友 |
| 1 | 3 |兄弟姐妹 |
| 2 | 7 |恋人 |
所以:
- 在table女孩中有一个字段关系,它是one2many 指向 table 关系。
- 在 table 男孩中有一个字段关系,它是一个 one2many 指向 table 关系。
- 在 table 关系中有两个字段,girl_id 和 boy_id, 都分别指向 table 的女孩和男孩。
场景:
在女孩和男孩的形式中存在场关系。当我为女孩或男孩添加新关系时,会打开一个表格来填写 table 关系(girl_id、boy_id 和 relationship_type)的字段。假设我是一个女孩,我点击添加新关系,然后打开了表格。我这样做是为了不看到 girl_id(它是不可见的,但它包含当前女孩的 ID)。所以我只能看到两个字段(boy_id 和 relationship_type)。
我想要的:
继续这个例子,如果我打开 boy_id 的下拉列表,我会看到所有男孩,甚至是那些已经与这个女孩有血缘关系的男孩。例如,如果我给 id 为 1 的女孩添加关系,我不能看到 id 为 2 和 3 的男孩,如果女孩是 id 2 的那个,我不能看到 id 为 7 的男孩。
我的尝试
我在 table 关系中创建了两个字段,名为 boys_of_the_girl(one2many 与 'girl_id.relationships' 相关)和 girls_of_the_boy(one2many 与 [=92= 相关) ]).
我的代码:(示例:为女孩建立关系)
<field name="girl_id" invisible="1"/>
<field name="boys_of_the_girl" invisible="1"/>
<field name="boy_id" domain="[('id', 'not in', boys_of_the_girl)]"/>
<field name="relationship_type"/>
错误:
RuntimeError: 调用 Python 对象时超出最大递归深度
有人能帮帮我吗?谢谢!
编辑
Table 男孩
relationships = fields.One2many(comodel_name='relationship',
inverse_name='boy_id',
string='Relationships')
Table 女孩
relationships = fields.One2many(comodel_name='relationship', inverse_name='girl_id', string='Relationships')
Table 关系
boy_id = fields.Many2one(comodel_name='boy', string='Boy', required=True)
girl_id = fields.Many2one(comodel_name='girl', string='Girl', required=True)
relationship_type = fields.Char(string='Relationship type')
嗯,最后我发现通过 XML 代码无法管理这个,但可以通过 Python:
达到同样的目的只有这个功能(和另一个类似girl_id域的另一种形式):
@api.onchange('girl_id')
def on_change_girl_id(self):
current_girl_id = self.env.context.get('default_girl_id', False)
relationship_recordset = self.search([('girl_id', '=', current_girl_id)])
boy_recordset = relationship_recordset.mapped('boy_id')
boy_ids = boy_recordset.mapped('id')
boy_id_domain = [
('id', 'not in', boy_ids)
]
result = {
'domain': {
'boy_id': boy_id_domain,
},
}
return result
这样就不需要在 XML 表单的 boy_id 字段中添加任何域。这个函数会影响你为女孩设置关系的形式,正如我上面写的,必须声明另一个类似的函数来管理为男孩设置关系时的正确行为。