数据库中的Django默认值

数据库中的Django默认值,django,postgresql,postgresql-9.5,django-1.9,Django,Postgresql,Postgresql 9.5,Django 1.9,因此,正如我最近了解到的,我们在Django字段中指定的default仅用于填充预先存在的行,在数据库级别不起“真实”默认值的作用。这可以通过从数据库shell中查找column\u default来验证 如果我理解正确的话,default被Postgres用来在没有输入的情况下输入值。如果是这样,那么如果不提供默认值,我们就不能在Django中创建新对象,对吗 例如— class MyModel(models.Model): name = models.CharField(max_le

因此,正如我最近了解到的,我们在Django字段中指定的
default
仅用于填充预先存在的行,在数据库级别不起“真实”默认值的作用。这可以通过从数据库shell中查找
column\u default
来验证

如果我理解正确的话,
default
被Postgres用来在没有输入的情况下输入值。如果是这样,那么如果不提供默认值,我们就不能在Django中创建新对象,对吗

例如—

class MyModel(models.Model):
    name = models.CharField(max_length=255)
    status = models.BooleanField(default=True) # new field added
对于上述模型,
默认值
仅用于为预先存在的行回填新添加的字段。它实际上并没有在数据库级别设置默认值

 column_name | column_default                                     
-------------+----------------
 mymodel     | 
但如果是这样的话,我就不能运行这个查询了-

MyModel.objects.create(name='test')
因为没有“真正的”违约。但我能,我不明白为什么

谢谢大家!

引用文档:

创建新模型实例且未为字段提供值时,将使用默认值。当该字段是主键时,当该字段设置为“无”时,也会使用默认值

默认值在应用程序级别工作,而不是在数据库级别。我的意思是,当创建新的模型实例时(在内存中),应用默认值,但没有提供显式值

默认值
不会转换为ddl(数据库数据定义语言),如
非空
唯一
do

请注意,
default
可能是一个值,也可能是一个django函数,在创建新模型以提供值时调用该函数


因为所有这些,默认字段值将不会出现在数据库架构上。

是的,这在Django中是一个巨大的架构问题。这很奇怪。知道他们为什么这么做吗?@SohamDongargaonkar,因为将随机python代码转换为任何品牌的数据库代码(t-sql、pl-sql,…)都不是一件小事