Django Admin: динамическое создание необязательных полей - PullRequest
4 голосов
/ 10 сентября 2009

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

Предположим, у меня есть следующие модели:

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

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

Ответы [ 2 ]

3 голосов
/ 11 сентября 2009

Т. Стоун прав. Вот как вы делаете это с формой модели:

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 голосов
/ 11 сентября 2009

Я думаю, что было бы просто установить для foo_barr значение blank = True, а затем реализовать собственную форму и пользовательскую проверку для использования в модели Admin. См. Эту часть документации - Добавление пользовательской проверки к администратору

...