Reiniger Art und Weise auf einer dynamischen Anzahl der Spalten in Django abzufragen?

stimmen
0

In meinem Fall habe ich eine Reihe von Spaltennamen aus einem Formular. Ich möchte filtern, um sicherzustellen, dass sie alle wahr sind. Hier ist, wie ich es zur Zeit:

for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Jetzt ist es funktioniert , aber es gibt eine mögliche ~ 40 Spalten zu prüfen sind und es daher nicht erscheint sehr effizient Abfragen zu halten.

Gibt es eine Weise, die ich diese in eine Filterabfrage kondensieren kann?

Veröffentlicht am 09/12/2008 um 18:00
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
9

Erstellen Sie die Abfrage als Wörterbuch verwenden ** Operator die Optionen als Schlüsselwort-Argumente der Filtermethode zu entpacken.

op_kwargs = {}
for op in self.cleaned_data['options']:
    op_kwargs[op] = True
cars = CarModel.objects.filter(**op_kwargs)

Dies wird in der überdachten django Dokumentation und wurde abgedeckt auf SO auch.

Beantwortet am 09/12/2008 um 18:37
quelle vom benutzer

stimmen
3

Djangos Abfrage-Sets sind faul, also was Sie gerade tun, ist eigentlich ziemlich effizient. Die Datenbank wird nicht getroffen werden, bis Sie versuchen, eines der Felder in der QuerySet zugreifen ... vorausgesetzt, das heißt, dass Sie nicht einige Codes bearbeiten geklappt haben, und es ist effektiv wie folgen aus:

cars = CarModel.objects.all()
for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Weitere Informationen hier .

Beantwortet am 09/12/2008 um 21:57
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more