В Django / postgres, если у вас есть поле, не допускающее значения NULL, все еще можно сохранить пустое str
значение ''
для определенных типов полей (например, CharField
, TextField
).
Примечание. Я не имею в виду blank=False
, который просто определяет, отображается ли поле с помощью required
в modelForm. Я имею в виду буквальное значение пустой строки.
Например, рассмотрим эту простую модель, которая имеет null=False
на CharField
:
class MyModel(models.Model):
title = models.CharField('title', null=False)
Следующее выдает IntegrityError
:
MyModel.objects.create(title=None)
В то время как следующее не создает и создает объект:
MyModel.objects.create(title='')
Является ли это непреднамеренным следствием объединения postgres с Django, или это предназначено / что практично использует ли он?
Если это непреднамеренно, как лучше всего с этим справиться? Должны ли каждые CharField
и TextField
с null=False
также иметь CheckConstraint
? Например,
Class Meta:
constraints = [
models.CheckConstraint(
check=~models.Q(title=''),
name='title_required'
)
]