【问题标题】:Is it possible to emulate a "contains" operator for domains? (the inverse of "in")是否可以模拟域的“包含”运算符? (“在”的反义词)
【发布时间】:2018-01-09 10:45:53
【问题描述】:

我曾多次遇到需要在域左侧写入Many2many/One2Many 字段并在右侧写入简单记录的情况。类似于 in 运算符,但反过来。

我所做的是通过变通方法避免这种情况,但现在,我什么也没想到。我目前的情况如下:

如果您安装project 模块,您会看到每个project.task 对象都可以有一个唯一的负责人(user_id,是一个Many2one)。如果您打开任务视图,则会自动加载过滤器以仅查看您的任务:

<filter string="My Tasks" name="my_tasks" domain="[('user_id','=',uid)]"/>

但是,我需要的是允许将多个用户分配给同一个任务。所以首先,我在project.task 中创建了一个Many2many 字段:

user_ids = fields.Many2many(
    comodel_name='res.users',
    string='Project Managers',
    default=lambda self: self.env.user.mapped('id')
)

一切正常,但是,现在我需要使过滤器以与之前相同的方式工作,但使用此字段。这是我被困的地方,需要一个假设的运算符contains

<filter string="My Tasks" name="my_tasks" domain="[('user_ids','contains',uid)]"/>

有人处理过这种情况吗?有什么想法吗?

【问题讨论】:

    标签: python xml odoo-10 odoo


    【解决方案1】:

    好的,我意识到运算符 '=' 的工作方式就好像它也是一个 'contains'。所以实现这个问题真的很容易,因为新的过滤器必须和原来完全一样,只是改变了字段名称:

    <filter string="My Tasks" name="my_tasks" domain="[('user_ids','=',uid)]"/>
    

    我已经在版本 10 上尝试过,它正在工作!

    这些问题给了我提示:

    Odoo 8: Many2many domain filter

    How to check if field 'contains' the value in Odoo

    【讨论】:

    • 我认为 in 运算符即使在这种情况下也能正常工作
    • @dccdany 你是对的,我刚刚检查过它也适用于in 运算符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多