Какие поля модели Django не вызовут IntegrityError, если не введено никаких данных? - PullRequest
0 голосов
/ 09 июля 2019

Первоначально я думал, что если для какого-либо поля null=False, то, если программа не указывает значение для поля, будет вызвано IntegrityError за нарушение ограничения NOT NULL. Я знал, что некоторые поля, такие как CharField, являются исключением, но я проверил это, добавив FileField к модели как test = models.FileField(), и не предоставляя ему никаких входных данных. Сохранение модели не вызвало никакой ошибки.

Так что мой вопрос в том, какие поля модели позволяют программе сохранять модель, если не указано значение или значение по умолчанию и null=False? Я не могу найти какой-либо исчерпывающий список в Интернете.

1 Ответ

0 голосов
/ 09 июля 2019

1 - Вы не должны путать null с blank

  • null означает, что для поля не было указано значение. Если null=False, то вы должны указать значение для поля
    title = models.CharField(null = False)
    ......
    item = Item(.....)
    item.save() # won't save 
    item = Item(....., title='hello world')
    item.save() # will save
  • blank означает, что значение поля существует, но оно пустое. Если blank=Flase, то вы должны указать хотя бы непустое значение.
    title = models.CharField(blank= False)
    item = Item(.....)
    ......
    item.save() # won't save
    item = Item(....., title='')
    item.save() # won't  save
    item = Item(....., title='hello world')
    item.save() # will save

2 - FileField и ImageField все сохраняются в виде строки в базе данных, и вы можете добавить null=False или blank=False, чтобы сделать их необходимыми так же, как вы делаете с CharField.

file = models.FileField(null=False, blank=False)

Вы можете даже добавить больше ограничений, таких как расширение файла и размер файла, используя validators.

...