如何创建包含ID

时间:2018-05-31 18:17:47

标签: odoo odoo-10

我有一个可以分配给用户的模型。我用它来创建一个域,并能够过滤创建规则以限制记录: 型号:

...
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>
...

这是规则的一个普通用户,Sale模块至少有它。

现在可以为用户分配大量记录,并且记录可以包含有限数量的用户,但不止一个。为了解决这个问题,我使用了Many2many:

...
user_ids = fields.Many2many('res.users', 'test_user_relation', 'test_id', 'user_id)
...

使用这个新字段,我不能使用与以前相同的规则,因为包含没有运算符。我在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_id列表中?

谢谢, 本杰明·

1 个答案:

答案 0 :(得分:2)

哦,经过几个小时的搜索,我发现你可以在域中连接字段,如下所示:

...
<field name="force_domain">[(user_ids.id', '=', user.id)]</field>
...

这就是我的问题的答案。

相关问题