Модель Django blank=False не работает?
у меня есть следующая модель в Django 1.5:
class Person(models.Model):
name = models.CharField(max_length=50)
отметим, что по данным https://docs.djangoproject.com/en/dev/ref/models/fields/ имя.пустой по умолчанию False, что означает, что он должен быть указан.
однако я мог бы успешно создать объект Person следующим образом:
Person.objects.create()
обратите внимание, что имя не указано. Что происходит?
Ok, ответ из документов:
обратите внимание, что это отличается от нулевой. null является чисто связанным с базой данных, тогда как blank связан с проверкой. Если поле имеет значение blank=True,форма проверки позволит ввести пустое значение. Если поле имеет значение blank=False, поле будет обязательным.
еще одна закавыка:
обратите внимание, что валидаторы не будут запускаться автоматически при сохранении модели, но если вы используете ModelForm, он будет запускать валидаторы на любых полях, которые включены в форма.
вы несете ответственность за вызов чистых методов перед сохранением, если вы не используете форму.
2 ответов
blank
применяется только к проверке поля формы, как в формах admin, django и т. д.null
С другой стороны, это столбец с нулевым значением уровня базы данных.
Что касается того, почему пустой результат по умолчанию ''
, Я действительно только что принял его как "вот как это работает", но вот где он, похоже, находится в django.db.models.Field
def get_default(self):
"""
Returns the default value for this field.
"""
if self.has_default():
if callable(self.default):
return self.default()
return force_unicode(self.default, strings_only=True)
if (not self.empty_strings_allowed or (self.null and
not connection.features.interprets_empty_strings_as_nulls)):
return None
return ""
# ^ this
Django создает пользователя с пустой строкой. Вы можете запустить Person.objects.all()
и он даст вам список, если вы сохраните его в переменной с именем user_list
и сделать что-то вроде user_list[0]
, он вернет объект пользователя с пустой строкой. Я не знаю, как и почему он это делает.