2012-08-17 2 views
1

У меня возникают проблемы с проверкой формы, чтобы она только когда-либо выбирала отдельного партнера. Классы работают так:Подтвердить поле встроенного внешнего ключа

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, чтобы попытаться подтвердить, что нынешний сотрудник имеет только одного партнера то же имя. Они могут иметь несколько объектов 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() пусто. Я думаю, что это связано с тем, что форма неограничена, и я не уверен, как решить проблему. Это та же проблема, что и у меня, когда я пытался отфильтровать выбор партнера после каждого сохранения, поэтому вы видите только тех партнеров, которых у вас нет, когда вы пытаетесь добавить новую рабочую группу. Если кто-то может предложить способ об ошибке, я был бы признателен.

ответ

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"),) 
Смежные вопросы