首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django中,null=True和blank=True有什么区别?

在Django中,null=True和blank=True有什么区别?
EN

Stack Overflow用户
提问于 2011-12-22 20:11:03
回答 28查看 449.3K关注 0票数 1.3K

当我们在Django中添加一个模型字段时,我们通常会写:

代码语言:javascript
运行
复制
models.CharField(max_length=100, null=True, blank=True)

ForeignKeyDecimalField等也是这样做的。两者之间的基本区别是:

  1. 仅限null=True
  2. 仅限blank=True
  3. null=Trueblank=True

对于不同的(CharFieldForeignKeyManyToManyFieldDateTimeField)字段?使用备选方案1、2或3的优缺点是什么?

EN

Stack Overflow用户

发布于 2022-07-24 04:00:22

Django模型中的每个选项都有两个目的

  1. 在数据库级别定义字段约束(例如SQL、Postgresql或任何其他)
  2. 在表单级别(在数据库层之上的框架级别)定义字段约束

现在让我们回到nullblank

  • blank是与Django表单相关的。它用于验证admin或Django中的Django窗体。特别是当我们调用form.is_valid()
  • null与数据库相关.它告诉底层数据库该列是否允许保存null值。

例如,让我们看看下面的例子-

代码语言:javascript
运行
复制
class Company(models.Model):
    name = models.CharField(max_length=100)
    website = models.UrlField()
    founded_on = models.DateField(blank=True, null=False)
    random_date = models.DateFeild(blank=False, null=True)
    random_text = models.TextField(null=True, blank=True)

我已经定义了一个Company模型,它有两个字段,我们在其中使用blanknull选项。让我们看看不同的字段发生了什么

  • founded_on:可以在表单级别(框架/语言级别)接收空的string值。在保存到数据库时,我们将引发IntegrityError,因为数据库将不接受null值,因为nullfalse
  • random_date:通过验证错误在表单级别(框架)接收空值,因为由于在窗体级别设置约束的blank true,因此不允许空白。但是,它还允许列在数据库层是null
  • random_text:这是一个选项,它意味着允许将字段保存为数据库层的null,并且允许空的string值为有效数据,这是由于blank=True导致的Django窗体验证逻辑。因此,简而言之,它可以接收空值(在框架级别,并可以在DB级别存储空值)。

要解决所有这些困惑,请考虑将数据库提交作为两层过程。

  • 首先,它填写我们可以在Framework级别调用验证数据的表单。
  • 其次,它有一个数据库级选项,它有助于定义DB约束。

在这里,blank是框架级的东西,而null是数据库级的反差。

票数 0
EN
查看全部 28 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8609192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档