Django 管理员默认过滤器 [英] Django admin default filter

查看:28
本文介绍了Django 管理员默认过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道我已经设法做到这一点,但不记得是如何做到的,也找不到任何关于此的文档..

I know I already managed to do this but can't remember how nor I can't find any documentation about this..

如何在管理员的对象列表视图中默认应用过滤器?

How can apply a filter by default on a object list view in the admin ?

我有一个列出报价的应用程序,这些报价有一个状态(例如:接受、拒绝、搁置..).

I have an app which list quotes and those quotes have a status (ex: accepted, rejected, on hold ..).

我希望过滤器默认设置为 status='accepted',即..

I want the filter set on status='accepted' by default that is..

推荐答案

更可重用的方法:

class DefaultFilterMixIn(admin.ModelAdmin):
    def changelist_view(self, request, *args, **kwargs):
        from django.http import HttpResponseRedirect
        if self.default_filters:
            try:
                test = request.META['HTTP_REFERER'].split(request.META['PATH_INFO'])
                if test and test[-1] and not test[-1].startswith('?'):
                    url = reverse('admin:%s_%s_changelist' % (self.opts.app_label, self.opts.module_name))
                    filters = []
                    for filter in self.default_filters:
                        key = filter.split('=')[0]
                        if not request.GET.has_key(key):
                            filters.append(filter)
                    if filters:                        
                        return HttpResponseRedirect("%s?%s" % (url, "&".join(filters)))
            except: pass
        return super(DefaultFilterMixIn, self).changelist_view(request, *args, **kwargs)            

然后在你的 ModelAdmin 上定义一个 default_filters:

And then just define a default_filters on your ModelAdmin:

class YourModelAdmin(DefaultFilterMixIn):
    ....
    default_filters = ('snapshot__exact=0',)

这篇关于Django 管理员默认过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆