Django 验证内联外键字段

Django 验证内联外键字段,django,inline,Django,Inline,我在尝试验证表单时遇到问题,因此它只能选择一个不同的合作伙伴。课程的工作方式如下: class EmpployeeAdmin(admin.ModelAdmin): #....... class EmployeeRoles(models.Model): partner = model.ForeignKey(Partner, relative_name='employee') employee = model.ForeignKey(Employee, relativ

我在尝试验证表单时遇到问题,因此它只能选择一个不同的合作伙伴。课程的工作方式如下:

class EmpployeeAdmin(admin.ModelAdmin):
    #.......

class EmployeeRoles(models.Model):
      partner = model.ForeignKey(Partner, relative_name='employee')
      employee = model.ForeignKey(Employee, relative_name='partner')

class EmployeeRolesInline(admin.TabularInline):
      model = EmployeeRoles
      extra = 0
      form = EmployeeRolesForm
在my forms.py中,我使用clean_partner函数尝试验证当前员工只有一个同名的合作伙伴。他们可以有多个EmployeeRoles对象和不同的合作伙伴,但只能为他们分配一次合作伙伴

class EmployeeRolesForm(forms.ModelForm):
      def clean_partner(self):
          partner = self.cleaned_data.get('partner')
          partner_ids=[int(p.partner_id) for p in self.instance.employee.partners.all()]
          if self.instance.partner_id is not None:
             return
          else:
             if partner.id in partner_ids:
                raise forms.ValidationError("Partner already chosen")
这不起作用,它给我一个错误,self.instance.employee.partners.all为空。我认为这与形式是无界的有关,我不知道如何解决这个问题。这与我在每次保存后尝试筛选合作伙伴选择时遇到的问题相同,因此当您尝试添加新的employeerole时,您只能看到您没有的合作伙伴。如果有人能提出解决错误的方法,我将不胜感激。

您可以在您的模型中使用:

class EmployeeRoles(models.Model):
      partner = model.ForeignKey(Partner, relative_name='employee')
      employee = model.ForeignKey(Employee, relative_name='partner')

      class Meta:
          unique_together = (("partner", "employee"),)