我应该在Django字段中使用默认的空字符串或允许空值

时间:2014-03-02 10:29:22

标签: django django-models django-forms

我猜这个问题在Django ORM之外也非常相关。由于我正在研究它,我会这样说。

说,我有一个django模型抽象类,其中包含以下字段

content = models.TextField()

一个继承的模型肯定需要它,而另一个继承模型基于选择(另一个字段)。我发现有两种方法可以:

  1. 在抽象类中使用null=True, blank=True,在继承的类中创建必要的条件验证语句

  2. 在抽象类中使用default=''并进行必要的条件验证

  3. 在这种情况下,我想要实现两件事

    1. 表单验证应该是有条件的
    2. 数据库验证应该是有条件的
    3. 哪种方法更受首选?为什么不是另一个?

1 个答案:

答案 0 :(得分:0)

来自django docs:

  

避免在基于字符串的字段(如CharField和)上使用null   TextField,因为空字符串值将始终存储为空   字符串,而不是NULL。如果基于字符串的字段具有null = True,那么   意味着它有两个可能的“无数据”值:NULL,空   串。在大多数情况下,拥有两个可能的值是多余的   “没有数据;”Django约定是使用空字符串,而不是NULL。

你不必为默认指定空字符串,因为这就是django无论如何都用于“无数据”。避免null。我建议您将该字段指定为blank = True(无null)并在表单级别强制执行验证。