Django 默认在数据库
Django default at database
所以我最近了解到,我们在 Django 字段中指定的 default
仅用于填充预先存在的行,并不用作 "real" 默认值在数据库级别。这可以通过从数据库 shell 中查找 column_default
来验证。
如果我没理解错的话,default
是 Postgres 在没有输入时用来输入值的。如果是这样,那么我们不应该在不提供默认值的情况下在 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')
因为没有 "real" 默认值。但是我可以,我不明白为什么。
谢谢!
引用文档:
The default value is used when new model instances are created and a value isn’t provided for the field. When the field is a primary key, the default is also used when the field is set to None.
默认适用于应用程序级别,而不是数据库级别。我的意思是,当(在内存中)创建新模型实例时应用默认值,但没有提供明确的值。
Default
没有像 not null
或 unique
那样被翻译成 ddl(数据库数据定义语言)。
注意 default
可能是一个值,或者也可能是一个 django 函数,在创建新模型时调用它来提供一个值。
因为这一切,默认字段值不会出现在数据库架构中。
所以我最近了解到,我们在 Django 字段中指定的 default
仅用于填充预先存在的行,并不用作 "real" 默认值在数据库级别。这可以通过从数据库 shell 中查找 column_default
来验证。
如果我没理解错的话,default
是 Postgres 在没有输入时用来输入值的。如果是这样,那么我们不应该在不提供默认值的情况下在 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')
因为没有 "real" 默认值。但是我可以,我不明白为什么。
谢谢!
引用文档:
The default value is used when new model instances are created and a value isn’t provided for the field. When the field is a primary key, the default is also used when the field is set to None.
默认适用于应用程序级别,而不是数据库级别。我的意思是,当(在内存中)创建新模型实例时应用默认值,但没有提供明确的值。
Default
没有像 not null
或 unique
那样被翻译成 ddl(数据库数据定义语言)。
注意 default
可能是一个值,或者也可能是一个 django 函数,在创建新模型时调用它来提供一个值。
因为这一切,默认字段值不会出现在数据库架构中。