如何创建包含 Id 的 Id 列表域
How to create a domain of list of Ids containing an Id
我有一个可以分配给用户的模型。我用它来创建域并能够过滤创建规则以限制要查看的记录:
型号:
...
class Test(models.Model):
_name = 'test.model'
user_id = fields.Many2one('res.users')
...
规则:
<record model="ir.rule" id="test_rule">
...
<field name="domain_force">[('user_id', '=', user.id)]</field>
...
这是规则的常见用户,至少销售模块有它。
现在一个用户可以被分配到很多记录并且记录可以有用户数量有限,但不止一个。为了解决这个问题,我使用了 Many2many:
...
user_ids = fields.Many2many('res.users', 'test_user_relation', 'test_id', 'user_id)
...
对于这个新字段,我不能使用与以前相同的规则,因为没有 contains 中的运算符。我在 res.users 模型中创建了反向字段,因此用户拥有其测试记录列表并创建了一个仅显示用户分配记录的规则:
...
Users(models.Model):
_inherit = 'res.users'
test_ids = fields.Many2many('test.model', 'test_user_relation', 'user_id, 'test_id')
...
<record model="ir.rule" id="test_rule">
...
<field name="domain_force">[('id', 'in', user.test_ids)]</field>
...
这一切都可行,但最终一个用户可能拥有数千条测试记录,恐怕这会减慢测试模型的工作流程。
我已经放弃的一个答案是拥有与用户记录限制一样多的用户字段,但我需要保持能够更改此限制数量,并且不能真正设置最大用户数。
有没有办法制定规则,使其只检查用户的 ID 是否在 user_ids 的列表中?
谢谢,
本杰明
哦,好吧,经过数小时的搜索,我发现您可以连接域中的字段,如下所示:
...
<field name="force_domain">[(user_ids.id', '=', user.id)]</field>
...
这就是我的问题的答案。
我有一个可以分配给用户的模型。我用它来创建域并能够过滤创建规则以限制要查看的记录: 型号:
...
class Test(models.Model):
_name = 'test.model'
user_id = fields.Many2one('res.users')
...
规则:
<record model="ir.rule" id="test_rule">
...
<field name="domain_force">[('user_id', '=', user.id)]</field>
...
这是规则的常见用户,至少销售模块有它。
现在一个用户可以被分配到很多记录并且记录可以有用户数量有限,但不止一个。为了解决这个问题,我使用了 Many2many:
...
user_ids = fields.Many2many('res.users', 'test_user_relation', 'test_id', 'user_id)
...
对于这个新字段,我不能使用与以前相同的规则,因为没有 contains 中的运算符。我在 res.users 模型中创建了反向字段,因此用户拥有其测试记录列表并创建了一个仅显示用户分配记录的规则:
...
Users(models.Model):
_inherit = 'res.users'
test_ids = fields.Many2many('test.model', 'test_user_relation', 'user_id, 'test_id')
...
<record model="ir.rule" id="test_rule">
...
<field name="domain_force">[('id', 'in', user.test_ids)]</field>
...
这一切都可行,但最终一个用户可能拥有数千条测试记录,恐怕这会减慢测试模型的工作流程。 我已经放弃的一个答案是拥有与用户记录限制一样多的用户字段,但我需要保持能够更改此限制数量,并且不能真正设置最大用户数。
有没有办法制定规则,使其只检查用户的 ID 是否在 user_ids 的列表中?
谢谢, 本杰明
哦,好吧,经过数小时的搜索,我发现您可以连接域中的字段,如下所示:
...
<field name="force_domain">[(user_ids.id', '=', user.id)]</field>
...
这就是我的问题的答案。