Django默认数据库

时间:2018-12-10 12:55:17

标签: django postgresql postgresql-9.5 django-1.9

因此,正如我最近了解到的那样,我们在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')

因为没有默认值。但是我可以,我也不明白为什么。

谢谢!

1 个答案:

答案 0 :(得分:1)

引用文档:

  

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

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

Default不会像not nullunique那样转换为ddl(数据库数据定义语言)。

请注意,default可以是一个值,也可以是alseo,它是在创建新模型以提供值时调用的Django函数。

由于所有这些,默认字段值不会出现在数据库模式中。