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

53

我有一个Django模型,其中某些字段已经指定了默认值。我想要在后面的代码中获取这些字段之一的默认值。是否有一种简单的方法从模型中获取特定字段的默认值?

5个回答

88
TheModel._meta.get_field('the_field').get_default()

2
这是最好的答案。.get_default() 更加可靠,而 .default 并不总是返回默认值(例如,它可能是 NOT_PROVIDED)。 - Rufflewind

26

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

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

17

你可以像这样获取字段:

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

默认情况下,只是字段的一个属性:

myfield.default

10
现在,get_field_by_name 方法返回一个元组,其中第一个元素是字段对象。 - Adam
4
field.default 可能是一个可调用对象,应该使用 get_default()。 - Vajk Hermecz
8
因为此内容目前已过时,所以我要进行负评。 - fluffels
7
因为当前信息已经过时,所以被投下负票。建议使用TheModel._meta.get_field('the_field').get_default()。 - TheMan
1
.default 不总是返回默认值(例如,它可能是 NOT_PROVIDED)。.get_default() 更加可靠。 - Rufflewind
显示剩余2条评论

2

如果您不想显式地编写字段名称,也可以这样做:

MyModel._meta.get_field(MyModel.field.field_name).default

这将返回字段的默认值。


0

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

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'

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接