Django模型blank=False不起作用?

Django模型blank=False不起作用?,django,django-models,Django,Django Models,我在Django 1.5中有以下模型: class Person(models.Model): name = models.CharField(max_length=50) 请注意,根据 默认情况下,name.blank为False,这意味着必须指定它 但是,我可以按如下方式成功创建Person对象: Person.objects.create() 请注意,没有指定名称。发生了什么事 好的,文档中的答案是: 请注意,这与null不同。null纯粹与数据库相关,而blank与验证相关。

我在Django 1.5中有以下模型:

class Person(models.Model):
    name = models.CharField(max_length=50)
请注意,根据 默认情况下,name.blank为False,这意味着必须指定它

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

Person.objects.create()
请注意,没有指定名称。发生了什么事

好的,文档中的答案是:

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

另一个陷阱:

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

如果不使用表单,则在保存之前调用clean方法是您的责任


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

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

首先,这个
name=…
怎么了?不要这样做。我相信游戏指的是缩进。不建议按照PEP-8进行编码练习。@bernie是的,这正是我想要得到的。我从来不知道。我学到了一些新东西。