我什么时候应该在django模型字段上使用null = False

时间:2015-06-07 14:44:27

标签: django django-models

这些问题询问null argument的作用:

但我想知道,我什么时候应该使用它?

例如,我为什么要限制自己?它是否纯粹是为了捕捉它们发生的错误?作为一般规则,我应该对所有模型关系使用null=False,除非我真的需要它True?是否存在我实际需要的情况?

3 个答案:

答案 0 :(得分:1)

我听过/使用的一般规则是你的数据库应该尽可能严格接受它;你的数据库是你对世界的理解,排除不良数据(或至少引起你的注意)是一个很好的特质。

(当你想用model_mommy生成正确的数据时,字段参数也很有用;它只会生成适合你的字段的数据,所以缩小它们可以帮助CYA并编写好的测试。)

default is False,所以简单的道路是正确的。只需标记你需要的可空的东西:)。

编辑:您可能需要可空性的一个地方是轮询外国数据。如果您正在镜像将在数据中使用新对象的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')

如果你在保存那个人之前抓取推文并点击一个新的推文,你可能会get_or_create一个对象来填充Tweet.person。但是,你不知道那个人的名字;您希望名称可以为空(并且可能定期在您的数据库上运行完整性任务以查找并修复这些问题。)

答案 1 :(得分:1)

NOT NULL是一个强制数据完整性的工具,如果该列永远不能为空,这总是一件好事。最好是在早期发现错误,而不是稍后发现出现问题并且您的数据不一致或丢失。数据完整性是数据库设计的重要组成部分,因此您应该使用所有可用的工具。

需要吗?不,你应该在适当的时候使用吗?当然。我应该在使用null=True时使用null=False吗?是的,我有。如果您的代码按预期工作,则没有理由使用null=False。但是错误发生了,当它们发生时,你不想发现你的一半数据是错误的。

答案 2 :(得分:0)

作为后端开发人员设置最小数据的职责部分是定义模型所必需的,如果某些字段不是null=True or blank=True,则数据库不允许您保存模型,因为他们需要将数据写入行。 (内部一致性是SQL数据库中的基本行为)

因此,当不需要字段时,您应将其标记为空白= True或Null = True,并且您有责任正确标记它们。

作为一个加号,django将这些数据用于表单验证,这样做可以在以后帮助您。