【问题标题】:Default django-admin list filter默认 django-admin 列表过滤器
【发布时间】:2012-05-11 18:20:16
【问题描述】:

我的问题只是这个线程 [问题]http://stackoverflow.com/questions/851636/default-filter-in-django-admin 的扩展。

from myproject.myapp.mymodels import fieldC


class Poll(models.Model):

    fieldA = models.CharField(max_length=80, choices=CHOICES.MyCHOICES) 
    fieldB = models.ForeignKey(fieldC)

admin.py

list_display = ('fieldB__fieldc1')

Now my list filter shows four criteria All, A ,B ,C  . 

我想要的是,如果超级用户已登录,过滤器应该显示所有四个条件 All、A、B、C,如果用户不是超级用户,过滤器应该只显示 All、A、B。

我怎样才能做到这一点? 这是我实际的 admin.py

def changelist_view(self, request, extra_context=None):

        referer = request.META.get('HTTP_REFERER', '')
        test = referer.split(request.META['PATH_INFO'])
        if test[-1] and not test[-1].startswith('?'):
            if not request.GET.has_key('patient__patient_type__exact'):

                q = request.GET.copy()
                q['patient__patient_type__exact'] = 'Real'
                request.GET = q
                request.META['QUERY_STRING'] = request.GET.urlencode()
                if not request.user.is_superuser:
                    q['patient__patient_type__exact'] = 'Real'
    return super(VisitAdmin, self).changelist_view(request, extra_context)


Thanks in advance 

【问题讨论】:

  • 我很困惑您是想为用户和 su 创建一个不同的默认过滤器,还是为用户创建一个不同的过滤器查询集和苏?
  • 我对超级用户和其他用户使用相同的过滤器。我只是希望当超级用户登录时,他应该在 list_filter 中看到所有选项,如 "Real" 、 "Test" 和 "Guest"他应该能够过滤该表的行,但如果用户不是超级用户,过滤器应该只在 list_filter 中显示“Real”和“Guest”选项,他应该只能过滤“Real”和“客人”的选择。

标签: django-admin


【解决方案1】:

我认为 Django 1.4 中的新 FilterSpec API 可以满足您的需要。 Check out the docs 在 list_filter 上。在 1.4 中,您现在可以创建子类 django.contrib.admin.SimpleListFilter 的自定义列表过滤器,并赋予您编写自定义查找和查询集代码的能力,并且由于传入了请求,您可以使用 is_superuser 执行简单的条件。

if request.user.is_superuser:
    # pass one set of lookups
else:
    # pass a different set

仔细阅读文档中的示例代码,我想一切都会清楚。

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2014-01-30
    • 2013-04-19
    • 2013-09-07
    • 2015-06-10
    相关资源
    最近更新 更多