Не возникает исключение при сохранении пустого поля с null=False - Django
У меня есть следующая модель:
class User(models.Model):
email = models.EmailField(max_length=254, null=False, unique=True)
referral_code = models.CharField(max_length=10, null=False, unique=True)
И использовал оболочку Django для сохранения пользовательского экземпляра с неопределенным ссылочным кодом:
u = User(email="test@example.com")
u.save()
Это не стало исключением. Насколько я понимаю, что null=False потребует установки referral_code - разве это не так? Как бы я достиг такого поведения?
Обновить
Я заметил, что поле установлено в u.referral_code=''
Поэтому, учитывая ограничение уникальности, это вызвало исключение, когда я попытался повторить процесс с новым экземпляром. Я бы предпочел, чтобы исключение было брошено, потому что я не установил поле...
1 ответ
Ценность вашего referral_code
не является null
, это ''
(пустая строка). Это по умолчанию CharField
,
Обновлено вместе с вопросом:
Вы можете вызвать ошибку, прежде чем данные будут сохранены в базе данных, переопределив save
на модели
class User(models.Model):
email = models.EmailField(max_length=254, null=False, unique=True)
referral_code = models.CharField(max_length=10, null=False, unique=True)
def save(self, *args, **kwargs):
assert self.email, "The 'email' field must be populated."
super().save(*args, **kwargs)
Следует отметить, что это не должно быть предпочтительным по сравнению с проверкой формы, где это возможно.