【问题标题】:Odoo error: return self.models[model_name] KeyError: 'res_groups_users_rel'Odoo 错误:返回 self.models[model_name] KeyError: 'res_groups_users_rel'
【发布时间】:2017-03-15 14:37:25
【问题描述】:

我需要制作 UI many2one 下拉列表,我可以在其中识别依赖于 Manager 组角色的用户。

现在我有下拉字段:

test = fields.Many2one('res.groups', 'Purchase request type', default=_get_users, track_visibility='onchange')

我尝试编写一个函数来识别依赖于经理组角色的所有用户。

def _get_users(self):
    pickings = self.env['res_groups_users_rel'].search([('gid','=',61)])
    pickings_available = []
    for picking in pickings:
            pickings_available.append(picking)
    return pickings_available

我得到一个错误:

    return self.models[model_name]
KeyError: 'res_groups_users_rel'

我不知道如何更改此函数并从 amy2many 关系中获取值。

我将函数更改为:

def _get_users(self): Picks = self.env['res.groups'].browse(61).users Picks_available = [] 用于采摘: Pickings_available.append(挑选) 返回picks_available

和字段:

test = fields.Many2one('res.users', 'Some text', default=_get_users, track_visibility='onchange')

我记录了函数 _get_users 并获取值:[res.users(9,), res.users(65,)]

但我仍然无法在我的测试字段下拉列表中获得这些值。我做错了什么?

【问题讨论】:

    标签: python-2.7 many-to-many openerp odoo-9 many-to-one


    【解决方案1】:

    如果您尝试获取属于某个组的所有用户,为什么不执行以下操作:

    self.env['res_groups'].browse(61).users
    

    附带说明,您可能会遇到错误,尝试将列表作为默认值分配给 Many2one 字段。

    此外,您似乎正在将属于某个组的用户分配给指定用于存储对组的引用的字段。

    如果您需要一个字段来选择属于 id 为 61 的组的用户,您可以执行以下操作:

    test = fields.Many2one('res.users', 'Some description', domain="[('groups_id', 'in', [61])]")
    

    【讨论】:

    • 你好,我并列:picks = self.env['res.groups'].browse(61).users 但是从我的测试字段中,我得到了所有没有过滤的组,但没有用户。
    • 您已指定要显示组的字段(通过将其定义为引用'res.groups' 模型)。如果您想过滤组,您还应该提供一个域。如果你希望它显示用户,那么你应该让它引用你的用户模型。
    • 我编辑了我的问题。对我的功能进行更改,但我仍然无法得到我想要的结果。如果我只是将测试字段更改为: test = fields.Many2one('res.users', 'Some description', domain="[('groups_id)', 'in', [61])]") 我得到了错误:ValueError: Invalid field u'groups_id)' in leaf ""
    • 它有效。但我无法理解域 = "[('groups_id', 'in', [61])]"。我在 mail_channel_res_group_rel 表中找到了 groups_id 字段。但是我无法理解它与 res.users 模型字段的关系。
    • 当定义了Many2many关系时,它是通过这些辅助(关系)表来实现的。如果您使用原始 sql,您将使用此表来实现您想要的。由于 ORM 的目的是简化事物,因此您可以将所有相关模型作为对象属性。例如,您可以只对res.partner 记录partner 执行partner.user_id.groups_id.id,而不是进行一堆连接。至于域部分,它只是一个过滤器。如果没有域,您的test 字段将允许您从所有用户中进行选择。对于上述域,只有在其groups_id 字段中具有组 id 61 的用户才会显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2021-03-26
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2017-07-09
    • 2021-10-27
    相关资源
    最近更新 更多