2010-02-17 2 views
12

Standardmäßig zeigt die Django Admin-Site alle Datensätze eines verwandten Modells/einer Tabelle zur Ansicht an. Wie kann ich nur die Datensätze anzeigen, die bestimmte Kriterien erfüllen?Wie kann man den Suchsatz/die Datensätze einschränken, die in der Django Admin-Site angezeigt werden sollen?

+0

Meinst du das standardmäßig, oder möchtest du nur, dass diese Option auf der Änderungsliste verfügbar ist? –

+0

Standardmäßig. Wenn ich die Seite lade, werden nur Datensätze angezeigt, die einige Anforderungen enthalten. Diese Anforderungen können im Backend geändert werden. – Viet

+0

Und auch, wie Sie diese auf der Änderungsliste erscheinen lassen? – Viet

Antwort

25

In Ihrer Admin-Definition können Sie eine queryset()-Methode definieren, die das Abfrage-Set für den Administrator dieses Modells zurückgibt. zB:

class MyModelAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(MyModelAdmin, self).queryset(request) 
     return qs.filter(user=request.user) 

Dann werden nur Objekte mit user=request.user wird im Admin sichtbar sein.

+1

+1 Ich bin so glücklich, das zu sehen und es war so einfach! Vielen Dank! – Viet

+0

Aber auf diese Weise ist es nicht möglich, zusätzliche Abfragen für andere Benutzer zu erhalten, wenn Sie danach suchen möchten. So beantwortet es die Frage nicht so wie ich es gelesen habe. –

+9

Seit Django 1.6 'queryset' wurde ersetzt durch' get_queryset' – peter2108

3

Ich weiß, dass dies eine "akzeptierte Antwort" hat, aber ich wollte das hier rausschmeißen, seit ich auf diese Antwort stieß, während ich etwas anderes verfolgte und erkannte, dass ich eine alternative Lösung hatte, die ich oft benutze und gebrauche Granular-Level-Kontrolle als die akzeptierte Antwort.

class TestAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if db_field.name == "FIELD": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

    def formfield_for_manytomany(self, db_field, request, **kwargs): 
     if db_field.name == "FIELDS": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) 
+0

Sehen Sie, was dort passiert ist! Seine Antwort war gut ... deine war besser. Sterling Arbeit. –

Verwandte Themen