Odoo 域属性如何工作?

Odoo how domain attribute works?

我的 odoo 'student.student' 模型中有一个 One2many 关系,就是这样

result_ids = fields.One2many("schoolresults.detail", "student_id", "SchoolResults")

"schoolresults.detail" 模型具有以下 Many2One 关系字段

student_id = fields.Many2one("student.student", "Student", ondelete="cascade")
subject_id = fields.Many2one("schoolresults.subject", "Subject")

问题是在添加结果 ID 字段时,可能会向同一个学生添加一些科目两次,但分数不同。 我试图在 schoolresults.detail 上制作 sql_constrait 'UNIQUE (student_id, subject_id)' 模型,但会引发错误。 如果主题已经被选中,我不希望它出现在选择字段中。 我认为答案是围绕域属性, 这张图片可能会掩盖我的语言错误。 enter image description here

您应该 return 在您的 one2many 字段 result_ids 上更改域。 例如:

ids_list = []
@api.onchnage('result_ids')
def onchange_result_ids(self):
    for record in self.result_ids:
        if record.subject_id:
           ids_list.append(record.subject_id.id)

    return {'domain': {'subject_id': [('id', 'not in', ids_list)]}}