【问题标题】:How to create a domain of list of Ids containing an Id如何创建包含 Id 的 Id 列表域
【发布时间】:2018-05-31 18:17:47
【问题描述】:

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

...
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 列表中?

谢谢, 本杰明

【问题讨论】:

    标签: odoo odoo-10


    【解决方案1】:

    好吧,经过数小时的搜索,我发现您可以连接域中的字段,如下所示:

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

    这就是我的问题的答案。

    【讨论】:

      猜你喜欢
      • 2015-10-02
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      相关资源
      最近更新 更多