Django 管理员默认过滤器 [英] Django admin default filter
本文介绍了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屋!
查看全文