有没有办法正确地重载Django的get_FIELD_display()
函数?当我从内部调用函数时,结果是递归。但我不能使用super()
来调用它,因为它不是父类的方法,而是由元类创建的方法...
目标是有一个公共界面来获取CHOICE
字段的可显示版本(由get_FIELD_display
给出),但可以在某些特定情况下自定义它。
示例:
# This does not work because it results in recursion
def get_opposition_state_display(self):
"""Overloading of default function."""
value = self.get_opposition_state_display()
if self.opposition_state == 4:
return '%s %s' % (value, self.opposition_date.strftime('%d.%m.%Y'))
return value
答案 0 :(得分:4)
<强>更新强>
field = self._meta.get_field('opposition_state')
value = self._get_FIELD_display(field)
答案 1 :(得分:2)
要覆盖get_FOO_display,您需要以下内容:
field_name = models.PositiveSmallIntegerField('Field', choices=some_choices)
def _get_FIELD_display(self, field):
f_name = field.name
if f_name == 'field_name':
return 'what_you_need'
return super(YourModelName, self)._get_FIELD_display(field=field)