Обязательное поле в модели Django не является обязательным?

У меня есть следующая модель Django:

class Customer(models.Model):
    email = models.EmailField(unique=True)

В моем тестовом примере я создаю экземпляр без электронной почты.

class CustomerTestCase(TestCase):
    def test_that_customer_can_be_created_with_minimum_data(self):
        customer = Customer.objects.create()
        print(customer.__dict__)

Я ожидаю, что он вызовет ошибку, но он создает запись с пустым полем email. То же самое произойдет, если я явно укажу null=False и blank=False. Вместо этого он просто печатает пустое письмо.

{'email': ''}

Что мне не хватает?


person physicalattraction    schedule 21.05.2017    source источник
comment
мои модели выглядят как class Customer(models.Model):   -  person FeFiFoFu    schedule 21.05.2017
comment
Ах да, мой тоже. Забыл добавить это сюда. Вопрос остается прежним. Обновил вопрос сейчас.   -  person physicalattraction    schedule 21.05.2017


Ответы (1)


Вы упускаете тот факт, что проверка не запускается при сохранении — см. документы проверки:

Обратите внимание, что валидаторы не будут запускаться автоматически при сохранении модели, но если вы используете ModelForm, ваши валидаторы будут запускаться для любых полей, включенных в вашу форму.

Как следует из этого документа, обычно проверка выполняется в контексте формы.

person Daniel Roseman    schedule 21.05.2017
comment
Дополнительную информацию о проверке моделей см. здесь. Для проверки всей модели используйте .full_clean(). - person Jesse; 22.05.2017
comment
Ммм, это ясно! Я думал, что это будет установлено на уровне базы данных, но это неверное предположение. Спасибо! - person physicalattraction; 22.05.2017