我啥时候应该在 django 模型字段上使用 null=False
Posted
技术标签:
【中文标题】我啥时候应该在 django 模型字段上使用 null=False【英文标题】:When should I be using null=False on django model fields我什么时候应该在 django 模型字段上使用 null=False 【发布时间】:2015-08-22 01:47:41 【问题描述】:这些问题询问null
argument 的作用:
differentiate null=True, blank=True in django
In Django models.py, what's the difference between default, null, and blank?
但我想知道,我应该什么时候使用它?
例如,我为什么要限制自己?纯粹是为了在错误发生时捕获它们吗?作为一般规则,我应该对所有模型关系使用null=False
,除非我真的需要它True
?有没有我真的需要它的情况?
【问题讨论】:
【参考方案1】:我听过/使用过的一般规则是,您的数据库应该尽可能严格地接受它;您的数据库是您对世界的理解,排除不良数据(或至少引起您的注意)是一个很好的特征。
(当您想使用 model_mommy 生成正确的数据时,字段参数也很有用;它只会生成适合您的字段的数据,因此对它们进行严格定制有助于 CYA 并编写良好的测试。)
default is False,所以容易的路是正确的。只需将您需要的内容标记为可空:)。
编辑:您可能需要可空性的一个地方是轮询外国数据。如果您正在镜像一个 API,该 API 将在告诉您有新对象之前使用数据中的新对象,那么您将希望有关该对象的数据可以为空,以避免无法保存新数据。
例如:
class Person(models.Model):
""" A person that might tweet """
name = models.CharField(max_length=200)
class Tweet(models.Model):
""" A message broadcast by a person. """
msg = models.TextField()
person = models.ForeignKey('Person')
如果您正在抓取推文并在保存该人之前点击了一个新的人的推文,您可能会获取_或_创建一个对象来填充 Tweet.person。但是,你不知道那个人的名字;您可能希望 name 可以为空(并且可能会定期在您的数据库上运行完整性任务以查找和修复这些问题。)
【讨论】:
【参考方案2】:NOT NULL
是一个强制数据完整性的工具,如果该列绝不能为空,这总是一件好事。最好早早地发现错误,而不是稍后发现出现问题并且您留下不一致或丢失的数据。数据完整性是数据库设计的重要组成部分,因此您应该使用所有可用的工具。
你需要吗?不,你应该在适当的时候使用它吗?确实。当我应该使用null=False
时,我是否使用了null=True
?是的,我有。如果您的代码正常工作,则没有理由使用null=False
。但是错误会发生,当它们发生时,您不想发现一半的数据是错误的。
【讨论】:
【参考方案3】:作为后端开发人员的职责之一是设置最小数据必须定义模型,如果某些字段不是null=True or blank=True
,数据库将不允许您保存模型,因为他们需要该数据来写入行。 (内部连贯性是 SQL 数据库的基本行为)
因此,当某个字段不需要时,您应该将其标记为空白=True 或 Null=True,并且您有责任正确标记它们。
此外,django 使用该数据进行表单验证,因此正确执行此操作将对您以后有所帮助。
【讨论】:
以上是关于我啥时候应该在 django 模型字段上使用 null=False的主要内容,如果未能解决你的问题,请参考以下文章