Пустой, нулевой и требуемый в моделях Django и ModelForms
До сих пор я не нашел четкого объяснения пустого, нулевого и обязательного - в моделях и формах Django.
Я знаю, что по умолчанию для каждого из них следующее:
blank = False
null = False
required = True
Я также знаю, что:
blank=True
(используется в models.py), означает на уровне формы принимать пустые формы - связанное поле не требуется в форме.
null=True
(используется в models.py), означает, что на уровне базы данных значения Python None
могут быть сохранены в модели и сохранены (а затем завершены как значения SQL NULL
в базе данных).
required=False
(используется в forms.py), означает, что связанное поле формы не является обязательным.
Надеемся, что приведенная выше информация будет полезна другим (пожалуйста, дайте мне знать, если есть какие-либо недостатки в логике, и я обновлю ее).
Мой вопрос заключается в следующем:
Когда я знаю, когда использовать blank=True
против required=False
. Если моя цель состоит в том, чтобы сделать поле формы необязательным, я мог бы определить это в модели, используя blank=True
, или я мог бы определить это в форме, используя required=False
. Означает ли это, что вы можете определить blank=True
в модели, а в связанной ModelForm
переопределить это с помощью required=True
?
Также связано, что, когда вы используете обычную форму (forms.Form
)? Поскольку форма не связана с моделью (кроме как с помощью логики представления), что произойдет, если они снова будут противоречить друг другу?
Ответы
Ответ 1
Противоречия не имеют значения. Я думаю, что это привносит гибкость в разработку приложения Django. Например, если вы используете стороннюю библиотеку, которая определяет некоторые модели, и они устанавливают blank=True
, но для других целей вам необходимо, чтобы это поле было обязательным, а затем в ваших формах вы можете исправить это, не касаясь кода сторонней библиотеки.
Это просто добавляет некоторую гибкость в рамки IMHO, что не приносит никакого вреда. Вы можете использовать его для своих целей. Противоречия несущественны.
Надеюсь, это поможет!
Ответ 2
Это зависит от требования. Иногда мы решаем позже сделать поле обязательным для формы, хотя на модели оно еще не требуется. Но форма будет гарантировать, что поле должно быть заполнено.
У вас может быть null=True
на модели, а затем вы можете сделать это поле обязательным для формы. Но вы не можете сделать поле необязательным в форме, когда оно является обязательным для модели, что впоследствии приведет к ошибке базы данных.