我在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 回答
blank
仅适用于表单字段验证,如admin,django表单等 .另一方面,
null
是数据库级可空列 .至于为什么空白导致默认
''
,我真的只是接受它为"that's the way it works"但这里它似乎在django.db.models.Field
Django使用空字符串创建您的用户 . 你实际上可以运行
Person.objects.all()
它会给你一个列表,如果你将它保存到一个名为user_list
的变量并执行类似user_list[0]
的操作,它将返回一个空字符串的用户对象 . 我不知道它是如何或为什么这样做的 .