因此,正如我最近了解到的那样,我们在Django字段中指定的default
仅用于填充预先存在的行,而在数据库级别上不充当“真实”默认值。可以通过从数据库外壳中查找column_default
来验证。
如果我正确理解,Postgres将使用default
来输入没有输入的值。如果是这样,那我们就不能在Django中创建一个新对象而不提供默认值,对吧?
对于前-
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')
因为没有默认值。但是我可以,我也不明白为什么。
谢谢!
答案 0 :(得分:1)
引用文档:
在创建新的模型实例且未为该字段提供值时使用默认值。如果该字段是主键,则将该字段设置为“无”时也将使用默认值。
默认值适用于应用程序级别,而不适用于数据库级别。我的意思是,当创建新的模型实例(在内存中)时,将应用默认值,但没有提供显式值。
Default
不会像not null
或unique
那样转换为ddl(数据库数据定义语言)。
请注意,default
可以是一个值,也可以是alseo,它是在创建新模型以提供值时调用的Django函数。
由于所有这些,默认字段值不会出现在数据库模式中。