POR FAVOR alguien me corrija, pero supongo que he encontrado una solución, al menos para mi propio caso.
Quiero trabajar en todos aquellos elementos cuyas propiedades son exactamente iguales a ... lo que sea.
Pero tengo varios modelos, y esta rutina debería funcionar para todos los modelos. Y lo hace:
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 esta subrutina universales, puedo seleccionar todos aquellos elementos que exactamente igual a mi diccionario de (PropertyName, propertyvalue) combinaciones 'escribe'.
El primer parámetro toma un (models.Model),
el segundo un diccionario como: { "propiedad1": "77", "propiedad2": "12"}
Y crea una instrucción SQL como
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
y devuelve un QuerySet en esos elementos.
Esta es una función de prueba:
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
Y? ¿Qué piensas?
Está en SQLAlchemy: http://docs.sqlalchemy.org/en/latest/orm/extensions/hybrid.html y puede conectar django con SQLAlchemy a través de https://pypi.python.org/pypi/aldjemy pero dudo que los dos puedan estar conectados de la manera que usted quiere que sean. – rattray