from django.contrib.auth.models import User
>>> User._meta.get_field("username").null
False
Но
>>> user()
<User: >
Что? Я ожидал IntegrityError
, потому что значение null
нельзя хранить в базе данных с null=False
.
Затем я прочитал это:
Django никогда не хранит NULL для пустых типов CharField или TextField. Он хранит пустую строку (''). Вот почему вы не получаете IntegrityError для null = False.
О, хорошо, это должно означать, что пустая строка определена как значение по умолчанию, верно?
User._meta.get_field("имя пользователя").default django.db.models.fields.NOT_PROVIDED
Какая? Я ожидал пустую строку... .
Тогда как вы должны проверять (например, для использования в тестах, с assertEquals
/assertRaise
/...), если не предоставление значения для определенного поля (например, username
) при создании экземпляра модели (например, User
) вызовет исключение ?
Редактировать
Я хотел бы знать, как кто-нибудь напишет модульный тест, чтобы проверить это. (Если бы assertNotRaises
существовало, было бы проще).