Python 是否';默认值=…';在Django模型字段集';空白=真';默认情况下?

Python 是否';默认值=…';在Django模型字段集';空白=真';默认情况下?,python,django,Python,Django,在应用default设置时,我对Django model字段有一个问题。我的问题如下: # Model description class aa(models.Model): a = models.FloatField(default=1) b = models.FloatField() 在将条目插入数据库时,我应用以下函数进行验证,不会出现任何错误: data = {'b': 1.1} # Just for demo... p = aa(**data) p.full_clea

在应用
default
设置时,我对Django model字段有一个问题。我的问题如下:

# Model description
class aa(models.Model):
    a = models.FloatField(default=1)
    b = models.FloatField()
在将条目插入数据库时,我应用以下函数进行验证,不会出现任何错误:

data = {'b': 1.1} # Just for demo...
p = aa(**data)
p.full_clean()
p.save()
问题是,当我为一个字段设置
默认值时,
空白
会自动设置为


另外,我知道
null
blank
之间有什么区别,我只想找出与
default
相关的问题,除非您指定
blank=True
和/或
null=True
。在您的示例中,模型会进行验证,因为您已将
a
默认设置为1,并将
b
设置为1.1。这两个字段都不是空的,因此您不会遇到与您所问问题相符的情况


尝试将
data={'b':1.1}
更改为
data={'a':1.1}
,看看会发生什么-您应该会得到一个字段验证错误

如果将
默认值
放在模型字段上,实际上它并没有设置
blank=True
。当您初始化
模型时

instance = ModelClass(**field_data)

django将检查所有字段,如果字段值不存在,那么它将通过调用
field
类上的
get\u default()
方法(查找默认值)尝试签入默认值。

是。Django总是这样做。如果您不需要该功能,请简单设置
blank=False

为清晰起见编辑的问题标题。因此,在这种情况下,使用默认值,模型实例将在执行
full\u clean
之前将所有字段设置为特定值?是的。您可以通过
instance=ModelClass(**field\u data)进行检查;打印实例.field
,具有默认值的字段。因此,
default
blank
的常见用法,而
null
对于某个模型字段,要么设置
default=…
,要么设置
blank=…
null=…
的组合,而不同时设置
default
blank
值?