为啥 django 模型的空白和空值不同的选项?

     2023-02-23     97

关键词:

【中文标题】为啥 django 模型的空白和空值不同的选项?【英文标题】:Why are blank and null distinct options for a django model?为什么 django 模型的空白和空值不同的选项? 【发布时间】:2011-12-30 20:28:09 【问题描述】:

在 django 模型中定义字段时,有两种方式表示允许该字段为空。 null 表示在数据库中可以为空,blank 表示在表单中该字段可以为空。为什么这些不同?每次我设置一个而不是另一个时都会出错。允许它们不同似乎只是在邀请表单的问题,允许您创建数据库不接受的对象。

换句话说,你什么时候会在 django 模型中使用 null=True,blank=Falsenull=False,blank=True

【问题讨论】:

【参考方案1】:

它们有两种完全不同的含义:

空白:确定是否应在表单中按要求验证字段。 False 表示如果不提供表单将产生错误,而True 表示允许空值。

null:确定该字段应在数据库级别设置为NULL 还是NOT NULL。这与表单验证无关。

一些例子:

blank=True, null=False 将在字段留空时引发IntegrityError,如果它不是 CharField 或 TextField。这两个字段在为空时将''(空字符串)而不是NULL 发送到数据库。

blank=False, null=True 将始终要求在所有表单中填写该字段(表单将在该字段上显示ValidationError),即使该列允许为NULL。但是,这仅适用于表单。您可以手动将属性设置为 None 并将其保存在表单之外(例如,在 shell 中)。

【讨论】:

+1 的主要区别是 null 影响 DB,而 blank 影响表单验证。请注意,使用blank=False 设置的字段将允许您保存该字段没有值的模型。如果您尝试在 ModelForm 中这样做,它只会引发验证异常。 我看到克里斯在他的最后一段中说过。哦! blank=False,null=True 对我来说仍然没有意义。如果您在表格之外更改它,那么记录就会成为一个地雷,如果您尝试在表格中对其进行编辑,它就会爆炸。我看到了 blank=True,null=False 背后的逻辑,但反过来似乎不太可能有用,而且肯定会遇到问题。 我认为你把这些搞混了。 blank=False,null=True 一点也不危险。这有点不合逻辑,因为它强制为可空字段设置值。但是,在某些用例中可能需要这样做,请记住,它仅在与表单一起使用时才需要。 blank=True,null=False,然而,可能导致 IntegrityError,但是对于 CHAR 和 TEXT 字段类型,Django 总是存储一个空字符串,而不是 NULL,因此这些字段类型很常见。跨度> blank=False,null=True 的问题在于您可以通过编程方式创建无法使用标准表单进行编辑的对象。它们将显示,但您无法在不更改该字段的情况下保存它们。这是没有意义的——这有什么可能的用例?为什么你想要一个强制你修改有效对象的表单?【参考方案2】:

null=False, blank=TrueCharFields 中很常见,其中空白答案作为空白字符串而不是空值存储在数据库中。反之则没有多大意义。

对于非字符串字段,非答案存储为 null,因此您需要两者。

【讨论】:

为什么人们会想要这种行为呢?在数据库中存储一堆空白字符串而不是根本没有值有什么好处?

为啥 django 模型的空白和空值不同的选项?

】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情

为啥 django 模型的空白和空值不同的选项?

】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情

设置空白和空值时,django 表单字段会引发错误

】设置空白和空值时,django表单字段会引发错误【英文标题】:djangoformfieldthrowserrorwhenblankandnullareset【发布时间】:2016-03-1504:19:28【问题描述】:我有以下表格:classPlayerForm(forms.ModelForm):crop_coords=forms.CharField(widget=forms.TextInput(att... 查看详情

自定义/删除 Django 选择框空白选项

】自定义/删除Django选择框空白选项【英文标题】:Customize/removeDjangoselectboxblankoption【发布时间】:2010-10-1820:43:54【问题描述】:我正在使用Django1.0.2。我写了一个由模型支持的ModelForm。此模型有一个ForeignKey,其中空白=False。当Dj... 查看详情

django modelform 为空显示空白

】djangomodelform为空显示空白【英文标题】:djangomodelformdisplayblankfornull【发布时间】:2015-04-1404:50:16【问题描述】:在django模型表单中,如何为空值显示空白,即防止在表单上显示(无)。使用postgresql,django1.6.5。我不希望在模... 查看详情

左外连接和空值转换

】左外连接和空值转换【英文标题】:LeftOuterJoinandNullValueconversion【发布时间】:2015-05-3011:05:00【问题描述】:我用两个带有不同where子句的选择拆分了我的输入数据,然后我想在经过一些聚合后用左外连接将它们重新连接在一... 查看详情

模型 CharField 空白和空

】模型CharField空白和空【英文标题】:ModelsCharFieldBlankandNull【发布时间】:2021-08-0411:17:23【问题描述】:我有以下型号:classScenario(models.Model):title=models.CharField(max_length=30)subtitle=models.CharField(max_length=60)description=models.TextFie 查看详情

如果这个 django 表单本身也生成选项,为啥它不接受我的输入?

】如果这个django表单本身也生成选项,为啥它不接受我的输入?【英文标题】:Whydoesn\'tthisdjangoformacceptmyinputifitalsogeneratestheoptionsitself?如果这个django表单本身也生成选项,为什么它不接受我的输入?【发布时间】:2022-01-0819:07:23... 查看详情

AngularJS 表单和空/空值

】AngularJS表单和空/空值【英文标题】:AngularJSformandnull/emptyvalues【发布时间】:2015-06-2520:34:13【问题描述】:我正在使用一个有点动态的AngularJS表单。换句话说,我可以添加输入字段的行等。所以我的方法是从$scope.formData空对象... 查看详情

mongo中的稀疏索引和空值

】mongo中的稀疏索引和空值【英文标题】:sparseindexesandnullvaluesinmongo【发布时间】:2012-01-2608:55:00【问题描述】:我不确定我是否正确理解稀疏索引。我在fbId上有一个稀疏的唯一索引"ns":"mydb.users","key":"fbId":1,"name":"fbId_1","unique":tr... 查看详情

localStorage 区分不存在的键和空值

】localStorage区分不存在的键和空值【英文标题】:localStoragedifferentiatebetweennon-existentkeyandnullvalue【发布时间】:2021-11-1901:30:08【问题描述】:在某些情况下,我需要在localStorage中存储一些“对象”为空的信息。但它不支持。localSt... 查看详情

MySQL查询以匹配两个表之间的日期和空值

】MySQL查询以匹配两个表之间的日期和空值【英文标题】:MySQLquerytomatchdateandnullbetweentwotables【发布时间】:2012-07-2805:39:27【问题描述】:我有两个这样的MySQL-tables:descstudents;+---------------------------+---------------+------+-----+---------+|F... 查看详情

模板中的 Django 和选项卡式导航

】模板中的Django和选项卡式导航【英文标题】:Djangoandtabbednavigationintemplates【发布时间】:2013-11-0116:59:05【问题描述】:我正在构建一个django项目,其中包括一个客户模型。任何客户都可以是某些日历条目模型或某些图片模型的... 查看详情

为啥 django 强制所有模型类都在 models.py 中?

】为啥django强制所有模型类都在models.py中?【英文标题】:Whydoesdjangoenforceallmodelclassestobeinmodels.py?为什么django强制所有模型类都在models.py中?【发布时间】:2010-11-2306:25:12【问题描述】:我刚刚了解到将模型类拆分为不同的文件... 查看详情

Android Json 和空值

】AndroidJson和空值【英文标题】:AndroidJsonandnullvalues【发布时间】:2012-05-2206:11:39【问题描述】:如何检测json值何时为空?例如:["username":null,"username":"null"]第一种情况表示不存在的用户名,第二种情况表示名为“null”的用户。... 查看详情

Swift:模型结构,使用可选项与空值的初始化

】Swift:模型结构,使用可选项与空值的初始化【英文标题】:Swift:modelstructs,usingoptionalsvsinitializationofemptyvalues【发布时间】:2014-11-1915:09:38【问题描述】:在Swift中,例如我有一个struct用于此model:structMessagevarmessage:String=""vartime... 查看详情

休眠,检查对象是不是存在和空值

】休眠,检查对象是不是存在和空值【英文标题】:hibernate,checkifobjectexistsandnullvalues休眠,检查对象是否存在和空值【发布时间】:2015-07-2011:56:29【问题描述】:我正在使用休眠将记录(即对象)保存到数据库。在保存我的对象... 查看详情

使用节点和空值查找最小值

】使用节点和空值查找最小值【英文标题】:Findingminimumvalueusingnodesandnull【发布时间】:2020-02-0415:24:21【问题描述】:只是想知道我应该如何解释这段代码?最让我失望的是minOfTail=next.minVal()部分,当我们将thisNumber与minOfTail进行... 查看详情