1

私の質問は、このスレッド [Question]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  . 

私が望むのは、スーパーユーザーがログインしている場合、フィルターは4つの基準すべて、A、B、Cを表示する必要があり、ユーザーがスーパーユーザーフィルター以外の場合、すべて、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 
4

1 に答える 1

0

Django 1.4 の新しい FilterSpec API は、ここで必要なものを正確に提供すると思います。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

ドキュメントのサンプル コードを注意深く読んでください。すべて明確になると思います。

于 2012-05-09T10:50:20.533 に答える