PER FAVORE qualcuno mi corregga, ma credo di aver trovato una soluzione, almeno per il mio caso.
Voglio lavorare su tutti quegli elementi le cui proprietà sono esattamente uguali a ... qualunque cosa.
Ma ho diversi modelli e questa routine dovrebbe funzionare per tutti i modelli. E lo fa:
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)
Con questa subroutine universale, posso selezionare tutti quegli elementi che sono esattamente uguali al mio dizionario di combinazioni "specificate" (nome proprietà, valore proprietà).
Il primo parametro accetta un (models.Model),
il secondo un dizionario come: {"property1": "77", "property2": "12"}
E crea un'istruzione SQL come
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
e restituisce un QuerySet su quegli elementi.
Questa è una funzione di test:
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
E? Cosa ne pensi?