BITTE korrigiert mich jemand, aber ich denke, ich habe eine Lösung gefunden, zumindest für meinen eigenen Fall.
Ich möchte an all jenen Elementen arbeiten, deren Eigenschaften genau gleich ... was auch immer sind.
Aber ich habe mehrere Modelle, und diese Routine sollte für alle Modelle funktionieren. Und es tut:
def selectByProperties(modelType, specify):
clause = "SELECT * from %s" % modelType._meta.db_table
if len(specify) > 0:
clause += " WHERE "
for field, eqvalue in specify.items():
clause += "%s = '%s' AND " % (field, eqvalue)
clause = clause [:-5] # remove last AND
print clause
return modelType.objects.raw(clause)
Mit dieser universellen Unterroutine kann ich alle Elemente auswählen, die genau meinem Wörterbuch der Kombinationen "Angeben" (Eigenschaftsname, Eigenschaftswert) entsprechen.
Der erste Parameter nimmt a (models.Model),
das zweite ein Wörterbuch wie: {"property1": "77", "property2": "12"}
Und es erstellt eine SQL-Anweisung wie
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
und gibt ein QuerySet für diese Elemente zurück.
Dies ist eine Testfunktion:
from myApp.models import myModel
def testSelectByProperties ():
specify = {"property1" : "77" , "property2" : "12"}
subset = selectByProperties(myModel, specify)
nameField = "property0"
## checking if that is what I expected:
for i in subset:
print i.__dict__[nameField],
for j in specify.keys():
print i.__dict__[j],
print
Und? Was denken Sie?