我在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,它将在表单中包含的任何字段上运行验证程序。
如果你没有使用表格,你有责任在保存前调用干净的方法。
答案 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]
之类的操作,它将返回一个空字符串的用户对象。我不知道它是如何或为什么这样做的。