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 ... qualsiasi 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 esattamente uguale il mio dizionario di (propertyName, propertyvalue) combinazioni di 'precisare'.
Il primo parametro prende un (models.Model),
il secondo un dizionario come: { "proprietà1": "77", "Property2": "12"}
E crea un'istruzione SQL come
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
e restituisce un QuerySet su tali 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?
È in SQLAlchemy: http://docs.sqlalchemy.org/en/latest/orm/extensions/hybrid.html e puoi connettere django con SQLAlchemy tramite https://pypi.python.org/pypi/aldjemy ma sono dubbioso che i due possano essere collegati nel modo in cui vuoi che siano. – rattray