2016-08-04 78 views
0

Wenn Sie Modelleinträge in Django Admin anzeigen, können Sie Filter angeben. Wie kann ich dieses Verhalten nachahmen? Nicht vertraut mit kwargs aber etwas ähnlich wie diese:Übergeben Sie Kwargs in Django Filter

foo = Model.objects.filter(**__exact='**') 

wo der erste Satz von ** ein Feld in dem Modell sein würde und der zweite Satz wäre ein Eintrag sein. Grundsätzlich werden die Abfragen basierend auf dem, was der Benutzer am Frontend wählt, variabel. Wie würde ich diese variable Sortieroption an die Ansicht senden und dann zurück an die Webseite senden? Was ist mit einem Wörterbuch? Bitte helfen

Diese SO question hat sich als ein wenig hilfreich erwiesen, kann es aber immer noch nicht vollständig erfassen. mit **

your_filters = { 
'field_1__exact': value_1, 
'field_2__gte': value_2, 
} 

Model.objects.filter(**your_filters) 

Antwort

1

Sie können eine Python dict als Filterparameter auspacken Gesagt, dass können Sie Ihre Abfragefilter gebaut (eine Python dict) dynamisch auf der Basis einer Benutzereingabe.

+0

Vielen Dank für Ihre Antwort. 2 Fragen: Gilt das '**' für die 'your_filters'-Variable, die Django wissen lässt, dass sich das ändern kann? Wenn ja, ist das nicht schon was eine Variable tut, variiert sie? Frage 2: Sagen wir, ich platziere "Platzhalter" auf der Vorderseite, wie kann ich die Auswahl des Benutzers zurück in die Ansicht übersetzen. Ein AJAX-Anruf vielleicht? – Kervvv

+0

@Kervvv über Ihre Frage 2: Ja, Sie können es mit Ajax übergeben und lesen sie von request.POST oder request.GET Daten, je nachdem, was Sie wollen. Ich verstehe die erste Frage nicht. – levi