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

Mav*_*ave 12 django django-models

我在Django 1.5中有以下模型:

class Person(models.Model):
    name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

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

但是,我可以成功创建一个Person对象,如下所示:

Person.objects.create()
Run Code Online (Sandbox Code Playgroud)

请注意,未指定名称.到底是怎么回事?

好的,文档的答案是:

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

另一个问题:

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

如果您没有使用表单,则在保存之前调用干净方法是您的责任.

Yuj*_*ita 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
Run Code Online (Sandbox Code Playgroud)