数据库中的Django默认值
因此,正如我最近了解到的,我们在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
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,…)都不是一件小事