是否记录了不同Django模型字段的默认值?

时间:2013-06-11 08:59:52

标签: django django-models

在南方文档的this部分中,它说

  

“某些列没有默认定义”。

使用syncdb时哪些模型字段获取默认值?哪些模型字段没有?(南方文档说BooleanField默认值为False)< / p>

我搜索过Django模型相关文档的model / ref /和/ topic /部分,但找不到这个。这是在某处记录的吗?

1 个答案:

答案 0 :(得分:1)

我在文档中找不到答案,所以我检查了source code for model fields。此方法提供除BinaryField以外的每个模型字段的“默认默认值”:

def get_default(self):
    """
    Returns the default value for this field.
    """
    if self.has_default():
        if callable(self.default):
            return self.default()
        return force_text(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 ""

因此,大多数字段类型的“默认默认值”由get_prep_value处理空字符串的方式决定。可以在same source file中找到get_prep_value的各种实现。看起来大多数字段都没有“默认默认值”,因为get_prep_value的大多数实现都不知道如何处理空字符串。该规则的值得注意的例外是BooleanField(默认为False),CharField(默认为空字符串)和TextField(默认为空字符串)。

我希望这有帮助!