Django模型blank=False不起作用?
我在Django 1.5中有以下模型: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与验证相关。
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是的,这正是我想要得到的。我从来不知道。我学到了一些新东西。