2011-10-29 17 views
0

在我的應用程序中,我必須添加一個鏈接來對管理列表頁面進行排序。排序必須基於不在list_display中的字段來完成。如何在Django的管理更改列表中添加分揀機

我的模型是

class Page(models.Model): 
    title = models.CharField(max_length=40) 
    published_on = models.DateTimeField('Date Published') 
    created_on = models.DateTimeField('Date Created') 

和我的管理文件

class PageAdmin(PageModelAdmin): 
    list_display = ('title', 'published_on') 
core.site.register(Page, PageAdmin) 

我只需要添加一個鏈接,「最近添加」,在管理列表頁面進行排序基於created_on名單是未添加到list_display。任何建議請

+0

糾正我,如果我錯了,你問如何'created_on'排序而不將其添加到'list_display'? – jsvk

回答

0

猜測你的意思;

如果你想要的是添加過濾器created_on而不將其添加到您list_display,你只需將其添加爲list_filter

class PageAdmin(PageModelAdmin): 
    list_display = ('title', 'published_on') 
    list_filter = ('created_on',) # The comma is important here 
admin.site.register(Page, PageAdmin) 
+0

是的,我想通過created_on排序而不將其添加到list_display。我試圖添加它作爲一個過濾器我怎麼能做到這一點?我的要求是我在管理列表頁面中有一個鏈接。點擊鏈接時,列表應按降序排列並顯示最近添加的列表。 – Fresher

+0

您是否介意發佈代碼或發佈任何錯誤?我試過這個,管理頁面上的項目排序很好,沒有列出現 – jsvk

0

有幾個選項。如果你總是希望你的網頁排序,您可以添加ordering到模型,將責令其所有查詢

class Page(...): 
    field = ... 

    class Meta: 
     ordering = ['published_on'] 

的更多相關信息,請參閱the docs

你也可以重寫查詢集爲您的特定的ModelAdmin:

class PageAdmin(...): 
    list_display = ... 

    def queryset(self, request): 
     qs = super(PageAdmin, self).queryset(request) 
     return qs.order_by('published_on') 

有一種感覺,如果排序沒有設置這只是工作,但現在不記得。在這個信息也是the docs,(對不起,沒有直接聯繫方法)

相關問題