2
有没有办法来正确地重载Django的get_FIELD_display()
函数?当我从内部调用函数时,结果是递归。但是我不能用super()
来调用它,因为它不是父类的方法,而是由元类创建的方法...重载get_FIELD_display()函数
目标是获得可显示版本的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
这似乎是正确的方式去了解它, '_get_FIELD_display()'是函数'Field.contribute_to_class()'咖喱和注入进入模型课堂。 – AKX 2012-02-15 12:35:35
编辑:对不起,我必须纠正自己。它不起作用,因为'_get_FIELD_display'方法需要一个字段作为参数,而不是字符串。在调用我自己的'get_opposition_state_display'方法时,该字段已经变成了类的属性... https://github.com/django/django/blob/master/django/db/models/ base.py#L581 – 2012-02-15 12:50:47
我想你可以把它从self._meta中拉出来,但是在那个时候,它可能会觉得不太复杂,只是将代码(它的所有2行)从'get_FIELD_display'中复制出来 – second 2012-02-15 12:55:49