2009-09-10 2 views
4

Как я могу сделать обязательные поля необязательными, когда другое [связанное] поле имеет определенное значение?Django Admin: обязательные поля необязательно динамически

Давайте предположим, что у меня есть следующие модели:

class foo(models.Model): 
    bar = models.CharField(max_length=200) 
    foo_date = models.DateTimeField() 

Когда я сохраняю и бар содержит определенное значение, я хотел бы foo_date стать необязательной. Как это сделать? Благодарю.

ответ

3

T.Stone является правильным. Это, как вы делаете это с модельной форме:

class foo(models.Model): 
    bar = models.CharField(max_length=200) 
    foo_date = models.DateTimeField() 

class ClientAdmin(MyModelAdmin): 
    form = FooModelForm 

class FooModelForm(forms.ModelForm): 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     if cleaned_data.get("bar") == 'some_val' and not cleaned_data.get('foo_date'): 
      msg = 'Field Foo Date is mandatory when bar is some_val' 
      self._errors[field] = ErrorList([msg]) 
      del cleaned_data[field] 
     return cleaned_data 

http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

2

Я думаю, что это просто вопрос установки foo_barr в пустую = True, а затем реализацию вашей собственной формы и пользовательской проверки для используемой модели администратора. См. Эту часть документации - Adding custom validation to admin

Смежные вопросы