Mav*_*ave 12 django django-models
我在Django 1.5中有以下模型:
class Person(models.Model):
name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
请注意,根据https://docs.djangoproject.com/en/dev/ref/models/fields/,name.blank 默认为False,这意味着必须指定它.
但是,我可以成功创建一个Person对象,如下所示:
Person.objects.create()
Run Code Online (Sandbox Code Playgroud)
请注意,未指定名称.到底是怎么回事?
好的,文档的答案是:
请注意,这与null不同.null纯粹与数据库相关,而blank与验证相关.如果字段为空= True,则表单验证将允许输入空值.如果字段为空= False,则将需要该字段.
另一个问题:
请注意,保存模型时不会自动运行验证程序,但如果您使用的是ModelForm,它将在表单中包含的任何字段上运行验证程序.
如果您没有使用表单,则在保存之前调用干净方法是您的责任.
Yuj*_*ita 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3946 次 |
| 最近记录: |