gpt4 book ai didi

数据库中的Django默认值

转载 作者:行者123 更新时间:2023-12-04 01:49:49 26 4
gpt4 key购买 nike

因此,正如我最近了解到的,我们在 Django 字段中指定的 default 仅用于填充预先存在的行,并不能作为数据库级别的“真实”默认值。这可以通过从数据库 shell 中查找 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')

因为没有“真正的”默认值。但我可以,我不明白为什么。

谢谢!

最佳答案

引用文档:

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 nullunique 那样转换为 ddl(数据库数据定义语言)。

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

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

关于数据库中的Django默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53706125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com