2014-01-20 118 views
2

我有模式是這樣的:Django管理get_FOO_display

class M(models.Model): 
    CHOICES = (('A', 'Accepted'), ('R', 'Rejected')) 

    status = model.CharField(max_length=1, choices=CHOICES) 

我通過這種方式登記在管理這種模式:

class MAdmin(admin.ModelAdmin): 
    list_display = ('get_status_display',) 

但我看到在狀態欄咖喱字段名

我如何給正常名稱狀態來欄或我犯了錯誤?

我可以按這個字段排序嗎?

回答

0

設置您調用的get_status_displayshort_description屬性來控制列名稱。您無法按計算值進行排序(Django使用數據庫執行排序),但如果您的基礎status字段提供了正確的排序順序,請將admin_order_field屬性設置爲'status'

list_display的文檔給設定這兩個屬性的例子: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

因爲它是一個自動創建的方法,這是稍微更復雜 - 可調用的是不可用的類定義的時間。我認爲你在登記管理前設置它們,但我沒有測試過:

M.get_status_display.short_description = 'status' 
M.get_status_display.admin_order_field = 'status' 
admin.site.register(M, MAdmin) 

如果還是不行,追下來的時候正好選擇字段的contribute_to_class方法被調用來添加自動創建方法是確定何時可以設置這些屬性的一種方法。但我可能會跳過它並在管理類上貼一個包裝,我知道我可以設置這些屬性。

0

這些屬性添加到您的功能

def get_status_display(self, obj): 
     -- 
     YOUR CODE HERE 
     -- 
get_status_display.short_description = 'status' 
get_status_display.admin_order_field = 'status'