Django по умолчанию в базе данных - PullRequest
0 голосов
/ 10 декабря 2018

Итак, как я недавно понял, default, который мы указываем в поле Django, предназначен только для заполнения уже существующих строк и не функционирует как «реальное» значение по умолчанию на уровне базы данных.Это можно проверить, посмотрев column_default из оболочки базы данных.

Если я правильно понимаю, Postgres использует default для ввода значений, когда нет ввода.Если это так, то мы не сможем создать новый объект в Django без указания значения по умолчанию, верно?

Для ex -

class MyModel(models.Model):
    name = models.CharField(max_length=255)
    status = models.BooleanField(default=True) # new field added

Для приведенной выше модели:default используется только для обратной засыпки вновь добавленного поля для уже существующих строк.На самом деле он не устанавливает значение по умолчанию на уровне базы данных.

 column_name | column_default                                     
-------------+----------------
 mymodel     | 

Но если это так, я не смогу выполнить этот запрос -

MyModel.objects.create(name='test')

, так как естьнет "реального" по умолчанию.Но я могу, и я не понимаю, почему.

Спасибо!

1 Ответ

0 голосов
/ 10 декабря 2018

Цитирование документов:

Значение по умолчанию используется, когда создаются новые экземпляры модели, а значение для поля не указывается.Когда поле является первичным ключом, значение по умолчанию также используется, когда для поля установлено значение Нет.

По умолчанию работает на уровне приложения, а не на уровне базы данных.Я имею в виду, что при создании нового экземпляра модели (в памяти) применяется значение по умолчанию, явное значение не предоставляется.

Default не переводится в ddl (язык определения данных базы данных) как not null илиunique do.

Обратите внимание, что default может быть значением или, кроме того, может быть функцией django, которая вызывается при создании новой модели для предоставления значения.

Поскольку всеthis, значение поля по умолчанию не будет присутствовать в схеме базы данных.

...