Django模型空白=假不起作用?
Posted
技术标签:
【中文标题】Django模型空白=假不起作用?【英文标题】:Django model blank=False does not work? 【发布时间】:2013-07-22 21:06:16 【问题描述】:我在 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 纯粹与数据库相关,而空白与验证相关。如果字段的空白=True,表单验证 将允许输入空值。如果某个字段的空白=False,则该字段为必填项。
另一个问题:
请注意,当您保存模型时,验证器不会自动运行,但如果您使用的是 ModelForm,它将在您的表单中包含的任何字段上运行您的验证器。
如果您不使用表单,则在保存之前调用 clean 方法是您的责任。
【问题讨论】:
首先,这是怎么回事name = ...
不要这样做。
我相信 Games 指的是缩进。不建议按照 PEP-8 进行编码实践。
@bernie 是的,正是我想要得到的。
【参考方案1】:
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
【讨论】:
我从来不知道。学到了一些新东西。 这太离谱了。实际上,在后端创建时似乎需要进行一些手动检查......另一个可能的解决方法是为这些 CharFields 设置 default=None。【参考方案2】:Django 使用空字符串创建您的用户。您实际上可以运行Person.objects.all()
,它会给您一个列表,如果您将它保存到一个名为user_list
的变量中并执行类似user_list[0]
的操作,它将返回一个带有空字符串的用户对象。我不知道它是如何或为什么这样做的。
【讨论】:
以上是关于Django模型空白=假不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django 时,save() 函数在使用模型表单时不起作用