Python Django CharField为空vs默认为空
Django应用程序中这两个字段之间的区别是什么?我应该期待什么样的行为Python Django CharField为空vs默认为空,python,django,django-models,Python,Django,Django Models,Django应用程序中这两个字段之间的区别是什么?我应该期待什么样的行为 field_a = CharField(max_length=50, verbose_name='field_a', blank=True) field_b = CharField(max_length=50, verbose_name='field_b', blank=True, default='') 如果未给出default值,则根据以下代码(取自django/db/models/fields/\uuuu init
field_a = CharField(max_length=50, verbose_name='field_a', blank=True)
field_b = CharField(max_length=50, verbose_name='field_b', blank=True, default='')
如果未给出
default
值,则根据以下代码(取自django/db/models/fields/\uuuu init\uuuu.py
)将空字符串用于CharField
:
所以它们的行为应该是一样的。。一般基于文本的字段(
CharField
,TextField
等)的最佳实践是使用CharField(blank=True)
。不要使用CharField(null=True)
。我明白了,但是如果我从字段中删除默认值=“”,django将生成一个迁移。你能解释一下原因吗?@Kye,我不明白你为什么提到null=True
。只要你更改字段定义上的任何参数,Django就会生成迁移,不管它是否对数据库有影响@falsetru:这并不是反对你的回答,只是一个一般性的相关提示,因为OP似乎并没有牢牢把握这个领域。
def get_default(self):
"""
Returns the default value for this field.
"""
if self.has_default():
if callable(self.default):
return self.default()
return self.default
if (not self.empty_strings_allowed or (self.null and
not connection.features.interprets_empty_strings_as_nulls)):
return None
return ""