我在尝试验证表单时遇到问题,因此它只选择一个独特的合作伙伴。这些类的工作方式如下:
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
在我的forms.py中,我使用clean_partner函数来尝试验证当前的Employee只有一个同名的伙伴。他们可以拥有多个具有不同合作伙伴的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()为空。我认为这与形式无关有关,我不知道如何解决问题。这与我在每次保存后尝试过滤合作伙伴选择时遇到的问题相同,所以当您尝试添加新的Employerole时,您只能看到您没有的合作伙伴。如果有人可以提出解决错误的方法,我会很感激。
答案 0 :(得分:0)
您可以在模型中使用unique_together
:
class EmployeeRoles(models.Model):
partner = model.ForeignKey(Partner, relative_name='employee')
employee = model.ForeignKey(Employee, relative_name='partner')
class Meta:
unique_together = (("partner", "employee"),)