2016-10-17 22 views
0

我有一個基於項目列表的IntegerField模型。如何使一個函數像Django Admin中的字段一樣工作?

LIST = (
    (0, 'None'), 
    (1, 'Male'), 
    (2, 'Female'), 
) 

class MyModel(models.Model): 
    gender = models.IntegerField(choices=LIST, default=0) 
    some_unimportant_value1 ... 
    some_unimportant_value2 ... 

在MyModel類中還有一個函數,如果性別尚未賦值,則返回False。

def genderHasValue(self): 
     if self.gender == 0: 
      return False 

當觀看在Django管理區域MyModels的名單,我希望能夠看到genderHasValue函數的計算結果。例如,Django管理區域爲MyModel可能是這樣的:

some_unimportant_value1 some_unimportant_value2 genderHasValue 
123      456      N 
789      012      Y 

這是假設some_unimportant_value1行具有0作爲其IntegerField和some_unimportant_value2行有1作爲IntegerField。

GenderHasValue函數可以做到這一點嗎?

謝謝。

回答

2

是的,這可以這樣實現:

# admin.py 
class MyModelAdmin(admin.ModelAdmin): 
    list_display = ['some_unimportant_value1', 'some_unimportant_value1', 'genderHasValue'] 

    def genderHasValue(self, obj): 
     if self.gender == 0: 
      return False 
     return True 

# The file where you configure your admin 
admin.site.register(MyModel, MyModelAdmin) 

UPDATE: 回答你的後續問題的意見:是的,它是可能的,只是把這個:

genderHasValue.short_description = "Gender Has Value"

你的財產定義後

+2

你甚至不需要將該方法移動到管理類;您可以直接在list_display中按名稱引用模型方法。 –

+0

謝謝你的答覆。問題:是否可以給該函數一個詳細的名稱,所以它有一個很好的標題值而不是「GENDERHASVALUE」? –

+1

@TomBrock:查看更新的答案 –

相關問題