Benutzerdefinierter Manager zum Filtern von Objekten vor Ort, aber nicht im Admin?

8

Ich habe dieses Beispiel verfolgt und es funktioniert großartig, aber ich frage mich, ob ich das sagen kann in einer Ausnahme, so dass wenn ich im Admin bin alle Objekte (aktiv und inaktiv) angezeigt werden. Dies könnte einfach sein, aber ich kann nicht finden, wie man es in den Dokumenten macht.

So sieht mein Manager jetzt aus:

%Vor%     
knuckfubuck 16.08.2010, 00:25
quelle

1 Antwort

9

Es gibt verschiedene Lösungen, die Ihnen einfallen:

  1. Definieren Sie, welche Abfragegruppe für die Änderungsliste mit ModelAdmin.queryset () .

  2. Installieren Sie 2 Manager auf Ihrem Modell, der erste, den der Administrator findet, wird als Standard-AFAIK verwendet.

    %Vor%
  3. Fügen Sie eine neue Methode in Ihrem benutzerdefinierten Manager hinzu, die nur aktive Inhalte zurückgibt und get_query_set unverändert lässt.

    %Vor%

Follow-up

Ich denke, die am besten geeignete Lösung in Ihrem Fall wäre die Kombination von # 1 und Variation von # 2.

Richten Sie Ihren benutzerdefinierten Manager als objects ein, damit jeder darauf zugreifen kann (ich denke, das sollte für Ihr Wiederverwendbarkeitsproblem funktionieren) und installieren Sie den Standardmanager in Ihrem Modell und verwenden Sie ihn in ModelAdmin.queryset() .

%Vor%

Ich hätte auch ModelAdmin.queryset() method-Beispiel einfügen sollen, also hier ist es.

%Vor%

Beachten Sie, dass die Zeile qs = self.model.admin_objects.get_query_set() mit admin_objects arbeitet  Dies ist die Instanz von plain manager und enthält unveröffentlichte Elemente.

Der Rest dieser Implementierung der Methode queryset ist die Standard-Django-Implementierung, die normalerweise qs = self.model._default_manager.get_query_set() aufruft.

Ich hoffe, das klärt die Dinge ein wenig auf.

    
Davor Lucic 16.08.2010, 07:30
quelle