Django Admin: динамическое создание необязательных полей
Вопрос
Как сделать обязательные поля необязательными, если другое [связанное] поле имеет определенное значение?
Предположим, у меня есть следующие модели:
class foo(models.Model):
bar = models.CharField(max_length=200)
foo_date = models.DateTimeField()
Когда я сохраняю, а bar содержит определенное значение, я бы хотел, чтобы foo_date стал необязательным. Как мне это сделать? Спасибо.
Решение
Т. Стоун прав. Вот как вы делаете это с помощью формы модели:
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
Другие советы
Я думаю, что было бы просто установить для foo_barr значение blank = True, а затем реализовать собственную форму и пользовательскую проверку для использования в модели Admin. См. Эту часть документации - Добавление пользовательской проверки для администратора
Не связан с StackOverflow