重载get_FIELD_display()函数

时间:2012-02-15 12:22:17

标签: django django-models

有没有办法正确地重载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

2 个答案:

答案 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)