PROSZĘ, aby ktoś mnie poprawił, ale myślę, że znalazłem rozwiązanie, przynajmniej dla mojego własnego przypadku.
Chcę popracować nad wszystkimi elementami, których właściwości są dokładnie równe… cokolwiek.
Ale mam kilka modeli i ta procedura powinna działać dla wszystkich modeli. I tak:
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]
print clause
return modelType.objects.raw(clause)
Dzięki tej uniwersalnej podprogramie mogę wybrać wszystkie te elementy, które dokładnie odpowiadają mojemu słownikowi kombinacji „określić” (nazwa właściwości, wartość właściwości).
Pierwszy parametr przyjmuje (modeles.Model),
drugi to słownik, taki jak: {"property1": "77", "property2": "12"}
I tworzy instrukcję SQL, taką jak
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
i zwraca QuerySet dla tych elementów.
To jest funkcja testowa:
from myApp.models import myModel
def testSelectByProperties ():
specify = {"property1" : "77" , "property2" : "12"}
subset = selectByProperties(myModel, specify)
nameField = "property0"
for i in subset:
print i.__dict__[nameField],
for j in specify.keys():
print i.__dict__[j],
print
I? Co myślisz?