覆盖Django模型中的get_FIELD_display方法

时间:2012-10-30 12:34:11

标签: django

假设我的模型中有一个名为field的字段,其中choices参数定义了get_field_display方法返回的值。

我需要get_field_display方法根据另一个字段返回不同的值。有没有办法覆盖get_field_display

这不起作用:

def get_field_display(self):
    if self.other_field == 1:
        return 'Other value'

    return super.get_field_display(self)

2 个答案:

答案 0 :(得分:4)

您无法调用super,因为该函数不是由父类定义的,而是由ModelBase元类定义的。试试这个:

def get_field_display(self):

    if self.other_field == 1:
        value = 'Other value'
    else:
        field_object = self._meta.get_field('field')
        value = self._get_FIELD_display(field_object)

    return value

答案 1 :(得分:1)

你可以做的是在同一个模型中创建一个不同的功能,然后猴子修补它。例如,在admin.py中,您可以执行以下操作:

ClassName.get_field_display = ClassName.get_patched_field_display

它不是很好'但它适用于我。