0

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

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

使用 syncdb 时哪些模型字段获得默认值,哪些没有?(South 文档说BooleanField默认值为False

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

4

1 回答 1

1

我在文档中也找不到答案,所以我检查了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处理空字符串。的各种实现get_prep_value可以在同一个源文件中找到。看起来大多数字段都没有“默认默认值”,因为大多数实现get_prep_value都不知道如何处理空字符串。该规则的显着例外是BooleanField(默认为 False)、CharField(默认为空字符串)和TextField(默认为空字符串)。

我希望这有帮助!

于 2014-01-11T10:08:47.680 回答