我有两种模特技能和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'
答案 0 :(得分:1)
您需要在声明中指定所有关键字以创建相同的关系表
fields.many2many(
comodel_name='model.name',
relation='valid_postgres_name',
colum1='current_model_m2o_field_name',
column2='comodel_m2o_name',
string='Label')
在另一个定义中,保持关系的相同名称,但与其他关键字相反。
技能
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