在django中添加数据库字段时,我们通常会写:

models.CharField(max_length=100, null=True, blank=True)

ForeignKeyDecimalField等的情况也是如此.有什么基本区别

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

关于不同的(CharFieldForeignKeyManyToManyFieldDateTimeField)字段.使用1/2/3有什么优点/缺点?

推荐答案

在数据库中的列上设置null=TrueNULL(而不是NOT NULL).Django字段类型(如DateTimeFieldForeignKey)的空白值将作为NULL存储在数据库中.

blank确定表单中是否需要该字段.这包括管理员和自定义表单.如果为blank=True,则不需要该字段,而如果为False,则该字段不能为空.

这两者的组合非常频繁,因为通常情况下,如果要允许表单中的某个字段为空,则还需要数据库为该字段允许NULL个值.例外情况是CharFields和TextFields,在Django中,never保存为NULL.空白值作为空字符串('')存储在数据库中.

举几个例子:

models.DateTimeField(blank=True) # raises IntegrityError if blank

models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form

显然,使用这两个选项在逻辑上是没有意义的(尽管如果希望表单中始终需要字段,可能会有null=True, blank=False的用例,在通过shell之类的东西处理对象时是可选的)

models.CharField(blank=True) # No problem, blank is stored as ''

models.CharField(null=True) # NULL allowed, but will never be set as NULL

Django从不将CHARTEXT类型保存为NULL,因此不需要null=True.但是,您可以手动将其中一个字段设置为None,以强制将其设置为NULL.如果你有一个可能需要这样做的场景,你仍然应该包括null=True.

Python相关问答推荐

如何使用PyTest根据self 模拟具有副作用的属性

Pandas :多索引组

Python中MongoDB的BSON时间戳

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

如何使用Google Gemini API为单个提示生成多个响应?

使用Keras的线性回归参数估计

如何将双框框列中的成对变成两个新列

在Pandas DataFrame操作中用链接替换'方法的更有效方法

图像 pyramid .难以创建所需的合成图像

如何过滤包含2个指定子字符串的收件箱列名?

两个pandas的平均值按元素的结果串接元素.为什么?

如何让这个星型模式在Python中只使用一个for循环?

无法连接到Keycloat服务器

如何合并两个列表,并获得每个索引值最高的列表名称?

如何从列表框中 Select 而不出错?

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

python panda ExcelWriter切换动态公式到数组公式

人口全部乱序 - Python—Matplotlib—映射

Gekko中基于时间的间隔约束

使用Python异步地持久跟踪用户输入