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