首页 文章

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

提问于
浏览
12

我在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

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

    至于为什么空白导致默认 '' ,我真的只是接受它为"that's the way it works"但这里它似乎在 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
    
  • 11

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

相关问题