2010-11-28 11 views
21

Ich versuche, eine Django-Abfrage zu tun, aber mit der Möglichkeit, mehrere verschiedene WHERE-Parameter. Also von Ich dachte, etwas zu tun:Verwenden einer Zeichenfolge als Argument für eine Django-Filterabfrage

querystring = "subcat__id__in=[1,3,5]" 
Listing.objects.filter(querystring) 

Listing hier in meinem Modell definiert ist, und es enthält die Many-to-Many-Feld „subcat“. Dies führt jedoch zu einem ValueError, da der Filter keine Zeichenfolge als Argument akzeptiert. Gibt es eine Möglichkeit in Python, eine Zeichenfolge nur als Inhalt und nicht als Zeichenfolge auszuwerten? So etwas wie eine print-Anweisung, die den Wert der Zeichenkette inline anstatt auf die Standardausgabe ausgibt.

By the way, der Grund, warum ich gerade

querystring = [1,3,5] 
Listing.objects.filter(subcat__id__in=querystring) 

nicht tun, ist, dass ich nicht immer für subcat__id Filterung bin, manchmal ist es ein oder mehrere andere Parameter, und ich hätte lieber nicht schreibe eine Reihe von separaten Abfragen aus, die von if-Anweisungen gesteuert werden. Jeder Rat wird sehr geschätzt. Vielleicht

Antwort

52

...

filter_dict = {'subcat__id__in': [1,3,5]} 
Listing.objects.filter(**filter_dict) 
+0

Perfect, das ist genau das, was ich gesucht habe! Danke vielmals. – danny

+0

@danny Akzeptierte Antwort dann? = P –

9
Listing.objects.filter(**{"subcat__id__in": ast.literal_eval("[1,3,5]")}) 
Verwandte Themen