2015-06-19 42 views
1

是否有辦法禁用django admin更改列表中某些字段的排序功能,因此對於這些字段,用戶無法單擊列標題對列表進行排序。Django admin更改列表視圖禁用某些字段的排序

我嘗試了以下方法,但它不起作用。

https://djangosnippets.org/snippets/2580/

我也累了覆蓋changelist_view中的ModelAdmin也沒有發生。

def changelist_view(self, request, extra_context=None): 
    self.ordering_fields = ['id'] 
    return super(MyModelAdmin, self).changelist_view(request, extra_context) 

在上述情況下,我想只允許用戶按ID排序列表。

有人有建議嗎?謝謝。

回答

0

對於Django 1.7(或我上次使用的版本)不支持這樣的事情。一個可能的骯髒的變通可能是定義模型類方法,並使用該方法而不是模型字段。

class TestClass(Model): 
    some_field = (.....) 
    other_field = (........) 

    def show_other_field(self): 
     return self.other_field 

class TestClassAdmin(ModelAdmin): 
    list_display = ("some_field", "show_other_field") 

由於show_other_field是一個模型類方法,Django的不知道如何進行排序(或過程),該方法的返回結果。

但正如我所說的,這是一種骯髒的黑客攻擊,可能需要根據用例進行更多的處理(也許更多的數據庫調用),而不是顯示模型的某個字段。

額外的:如果你想使一個模型的方法排序,你必須通過admin_order_field值,如:

def show_other_field(self): 
    return self.other_field 
show_other_field.admin_order_field = "other_field" 

這將使你的模型方法排序在管理list_display。但是您必須傳遞數據庫API的order_by方法中可用的字段或關係。

TestClass.objects.filter(....).order_by(<admin_order_field>) 
+0

謝謝。我想我只有這樣才能做到這一點。 – Pang

相關問題