Filtern von Django Admin nach Null / ist nicht Null

8

Ich habe ein einfaches Django-Modell wie:

%Vor%

Wie würde ich in ModelAdmin dieses Modells zulassen, dass es gefiltert wird, unabhängig davon, ob der Referrer null ist oder nicht? Standardmäßig wird beim Hinzufügen von Referrer zu list_filter ein Dropdown-Feld angezeigt, in dem jeder Personendatensatz aufgelistet ist, der möglicherweise Hunderttausende enthält, wodurch das Laden der Seite effektiv verhindert wird. Selbst wenn es geladen wird, kann ich immer noch nicht nach den gewünschten Kriterien filtern.

d. Wie würde ich dies ändern, so dass das Dropdown-Menü nur die Auswahlmöglichkeiten "Alle", "Null" oder "Nicht Null" enthält?

Ich habe einige Beiträge gesehen, die behaupten, etwas Ähnliches mit benutzerdefinierten FilterSpec-Unterklassen zu erreichen, aber keiner von ihnen erklärt, wie benutze sie. Die wenigen, die ich gesehen habe, scheinen auf alle Felder in allen Modellen zu wirken, was ich nicht möchte. Darüber hinaus gibt es eine zero Dokumentation für FilterSpec, was mich nervös macht, weil ich nicht in viel benutzerdefinierten Code investieren möchte, der an eine vorübergehende interne Klasse gebunden ist, die bei der nächsten Veröffentlichung verschwinden könnte. p>     

Cerin 07.10.2011, 19:18
quelle

6 Antworten

1

Am Ende habe ich eine Mischung aus der obersten Lösung hier verwendet , zusammen mit diesem Snippet .

Allerdings musste ich das Snippet ein wenig verändern, indem ich die Einschränkung des Feldtyps ablehnte und den neuen Feldpfad hinzufügte, der kürzlich in 1.3 hinzugefügt wurde.

%Vor%     
Cerin 07.10.2011, 19:59
quelle
13

Da Django 1.4 einige Änderungen an Filtern mit sich bringt, dachte ich mir, ich würde jemandem die Zeit sparen, die ich gerade damit verbracht habe, den Code aus Cerin's angenommener Antwort zu modifizieren, um mit Django 1.4 rc1 zu arbeiten.

Ich habe ein Modell mit TimeField (null = True) namens "started" und ich wollte nach Null- und Nicht-Null-Werten filtern, also ist es genau das gleiche Problem wie bei OP.
Also, hier ist was für mich funktioniert ...

Definiert (tatsächlich enthalten) diese in admin.py:

%Vor%

Als sie nur in ModelAdmin verwendet:

%Vor%     
frnhr 06.03.2012 22:59
quelle
7

Ich habe eine einfachere Version von frnhrs Antwort, die tatsächlich nach __isnull condition filtert. (Django 1.4 +):

%Vor%

Dann auch:

%Vor%

und schließlich:

%Vor%

Ich persönlich mag es nicht, meine admin.py mit Dutzenden von Klassen zu zerstören, also habe ich eine solche Hilfsfunktion entwickelt:

%Vor%

Was ich später anwenden kann wie in:

%Vor%     
Tomasz Gandor 09.10.2014 03:12
quelle
2

Ein Ausschnitt mit einer besseren Erklärung könnte dies sein. Django 1.4 wird mit einem vereinfachten Filtermechanismus ausgeliefert .

    
schneck 07.10.2011 19:26
quelle
2

Es gibt einen einfachen Weg:

%Vor%

Dann verwendet sie nur in ModelAdmin:

%Vor%     
yahuishuo 04.04.2017 07:17
quelle
1

Seit vier Jahren gibt es hier ein Ticket (https://code.djangoproject.com/ticket/5833). Es hat den Meilenstein 1.3 verfehlt, hat aber einen neuen Feature-Status erreicht und hat vermutlich seinen Weg in den Kofferraum gefunden. Wenn es dir nichts ausmacht, aus dem Kofferraum zu rennen, kannst du es jetzt benutzen. Der Patch ist jedoch angeblich 1.3-kompatibel, so dass Sie wahrscheinlich mit dem Patchen Ihrer aktuellen Installation zurecht kommen.

    
Chris Pratt 07.10.2011 19:27
quelle