假设我的模型中有一个名为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)
答案 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
它不是很好'但它适用于我。