如何在Django的管理员更改列表中添加分拣机

时间:2011-10-29 07:05:40

标签: django django-admin

在我的应用程序中,我必须添加一个对管理列表页面进行排序的链接。必须根据list_display中没有的字段进行排序。

我的模特是

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。请提出任何建议

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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,(抱歉,没有直接链接到方法)