【问题标题】:Default filter in admin site [duplicate]管理站点中的默认过滤器[重复]
【发布时间】:2013-05-07 16:10:30
【问题描述】:

有没有办法在管理员中设置过滤器的默认值 地点?

Class Account(models.model): 
    isClosed = models.BooleanField(blank=True) 
    name = models.CharField(core=True, max_length=255,unique=True) 

在 admin.py 中:

class Admin(admin.ModelAdmin): 
     list_filter = ['isClosed'] 

在管理页面上,我想要“isClosed”字段的默认值 是“不”,而不是“全部”。

谢谢。

【问题讨论】:

  • 答案有问题,当你不想应用过滤器时按显示全部,它仍然应用过滤器

标签: python django django-admin


【解决方案1】:

您需要创建一个自定义列表过滤器,从 django.contrib.admin.filters.SimpleListFilter 继承并默认过滤未关闭的帐户。这些方面的东西应该可以工作:

from datetime import date

from django.utils.translation import ugettext_lazy as _
from django.contrib.admin import SimpleListFilter


class IsClosedFilter(SimpleListFilter):
    title = _('Closed')

    parameter_name = 'closed'

    def lookups(self, request, model_admin):
        return (
            (None, _('No')),
            ('yes', _('Yes')),
            ('all', _('All')),
        )

    def choices(self, cl):
        for lookup, title in self.lookup_choices:
            yield {
                'selected': self.value() == lookup,
                'query_string': cl.get_query_string({
                    self.parameter_name: lookup,
                }, []),
                'display': title,
            }

    def queryset(self, request, queryset):
        if self.value() == 'closed':
            return queryset.filter(isClosed=True)
        elif self.value() is None:
            return queryset.filter(isClosed=False)


class Admin(admin.ModelAdmin):
    list_filter = [isClosedFilter]

【讨论】:

  • 很好的解决方案。我会补充的。如果您将它与其他列表过滤器一起使用,您需要执行以下操作:list_filter = ((isClosedFilter), ('date_created', admin.DateFieldListFilter),)
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 2011-01-12
  • 2020-11-24
  • 1970-01-01
  • 2019-08-17
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多