如何获取 Django 模型中字段的默认值?

Posted

技术标签:

【中文标题】如何获取 Django 模型中字段的默认值?【英文标题】:How do I get the default value for a field in a Django model? 【发布时间】:2010-11-21 10:55:01 【问题描述】:

我有一个 Django 模型,其中一些字段指定了默认值。我希望稍后在我的代码中为我们获取这些字段之一的默认值。有没有一种简单的方法可以从模型中获取特定字段的默认值?

【问题讨论】:

【参考方案1】:
TheModel._meta.get_field('the_field').get_default()

【讨论】:

这是最好的答案。 .get_default() 更可靠,而 .default 并不总是返回默认值(例如,它可能是 NOT_PROVIDED)。【参考方案2】:

从 Django 1.9.x 开始,您可以使用:

field = TheModel._meta.get_field('field_name')
default_value = field.get_default()

【讨论】:

【参考方案3】:

你可以这样获取字段:

myfield = MyModel._meta.get_field_by_name('field_name')

而默认只是字段的一个属性:

myfield.default

【讨论】:

现在get_field_by_name 方法返回一个以字段对象作为其第一项的元组。 field.default 可能是可调用的。应该使用 get_default() 投反对票,因为这目前已过时。 投了反对票,因为它目前已过时。应该做 TheModel._meta.get_field('the_field').get_default() .default 并不总是返回默认值(例如,它可能是 NOT_PROVIDED)。 .get_default() 更可靠。【参考方案4】:

如果你不想明确写出字段名,你也可以这样做: MyModel._meta.get_field(MyModel.field.field_name).default

【讨论】:

【参考方案5】:

如果您需要多个字段的默认值(例如,在某种重新初始化步骤中),只需实例化模型的新临时对象并使用该对象中的字段值可能是值得的。

temp_obj = MyModel()
obj.field_1 = temp_obj.field_1 if cond_1 else 'foo'
...
obj.field_n = temp_obj.field_n if cond_n else 'bar'

当然,如果可以在没有进一步性能/依赖性问题的情况下构造临时对象,这只是值得的。

【讨论】:

以上是关于如何获取 Django 模型中字段的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Django 模型中的 2 个字段共享相同的默认值?

如何使用 django rest 框架在模板中获取模型选择字段名称而不是 id

如何将 Django 模型字段的默认值设置为函数调用/可调用(例如,相对于模型对象创建时间的日期)

如何从用户在 django 基本模板中创建的所有帖子中获取模型字段值的总和?

如何使用数据为现有模型中的新模型字段设置默认值

如何使用格式化的日期时间字段获取 django 查询集结果