Django模型空白= False不起作用?

时间:2013-07-23 16:48:05

标签: django django-models

我在Django 1.5中有以下模型:

class Person(models.Model):
    name = models.CharField(max_length=50)

请注意,根据https://docs.djangoproject.com/en/dev/ref/models/fields/ name.blank默认为False,这意味着必须指定它。

但是,我可以按如下方式成功创建Person对象:

Person.objects.create()

请注意,未指定名称。发生了什么事?

好的,文档的答案是:

  

请注意,这与null不同。 null纯粹与数据库相关,而blank与验证相关。如果字段为空= True,表单验证将允许输入空值。如果字段为空= False,则需要该字段。

另一个问题:

  

请注意,保存模型时不会自动运行验证程序,但如果您使用的是ModelForm,它将在表单中包含的任何字段上运行验证程序。

     

如果你没有使用表格,你有责任在保存前调用干净的方法。

2 个答案:

答案 0 :(得分:11)

blank仅适用于表单字段验证,如admin,django表单等。
另一方面,null是一个数据库级可空列。

至于为什么空白会导致默认'',我真的只是接受它为“它的工作方式”,但这里似乎在django.db.models.Field

  def get_default(self):
        """
        Returns the default value for this field.
        """
        if self.has_default():
            if callable(self.default):
                return self.default()
            return force_unicode(self.default, strings_only=True)
        if (not self.empty_strings_allowed or (self.null and
                   not connection.features.interprets_empty_strings_as_nulls)):
            return None
        return ""  
        #       ^ this

答案 1 :(得分:0)

Django使用空字符串创建您的用户。您实际上可以运行Person.objects.all()并且它会为您提供一个列表,如果将其保存到名为user_list的变量并执行user_list[0]之类的操作,它将返回一个空字符串的用户对象。我不知道它是如何或为什么这样做的。