gpt4 book ai didi

python - 处理odoo中的many2many字段

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:20 25 4
gpt4 key购买 nike

我有两个模型技能和 res_users。

我希望每个用户都可以拥有许多技能,并且每个技能都可以有许多用户。我尝试这样做,但没有成功。

这是我的技能:

class technicians_skills(osv.osv):
_name = 'skills'
_description = 'Technicians Skills'

_columns = {
'name': fields.char(string='name', size=50),
'description': fields.text(string="description"),
'member_ids': fields.many2many('res.users', 'skill', string='Technicians')
}

这是用户:

class res_users(osv.osv):
_inherit = 'res.users'

_columns = {
'skill': fields.many2many('skills', relation='skills.rel', column1='name', column2='skill', string='Skill'),
}

我想了解每个用户的技能,但是当我调用它时:

test = http.request.env['skills.rel'].search([])

它向我显示了这个错误

KeyError: 'skills.rel'

最佳答案

您需要在声明中指定所有关键字才能创建相同的关系表

   fields.many2many(
comodel_name='model.name',
relation='valid_postgres_name',
colum1='current_model_m2o_field_name',
column2='comodel_m2o_name',
string='Label')

在另一个定义中保留相同的关系名称,但反转 other 关键字。

在技能方面

  user_ids = fields.many2many('re.users', 'user_skill_rel','user_id','skill_id', 'Users')

在用户中

skill_ids = fields.many2many('skills',  'user_skill_rel', 'skill_id', 'user_id', 'Skills')

看看我如何反转定义,只有关系是相同的。保持列的名称相同

编辑:

不要对关系执行搜索,因为它们不是模型。您需要在模型上执行搜索,然后访问 Many2many 字段。

假设您想获得当前用户的技能。

   self.env.user.skill_ids  # this will return the list of the skills for the current user

如果您想获得多个用户的技能。

  result = self.env['res.users'].search([your_domain]])

# if you need to show user information then it's skill
for rec in result:
# use loop
rec.name # user name
rec.skill_ids

# but if you want to get the list of skill and you don't need users
skills = result.mapped('skills_ids') # mapped will return all the skills without duplication

关于python - 处理odoo中的many2many字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49633500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com