LÜTFEN birisi beni düzeltir, ama sanırım en azından kendi durumum için bir çözüm buldum.
Özellikleri tam olarak eşit olan tüm unsurlar üzerinde çalışmak istiyorum ... her neyse.
Ama birkaç modelim var ve bu rutin tüm modeller için çalışmalı. Ve yapar:
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)
Bu evrensel alt yordamla, 'belirt' (özellik adı, özellik değeri) kombinasyonları sözlüğüme tam olarak eşit olan tüm öğeleri seçebilirim.
İlk parametre bir (models.Model) alır,
ikincisi şuna benzer bir sözlük: {"özellik1": "77", "özellik2": "12"}
Ve aşağıdaki gibi bir SQL ifadesi oluşturur
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
ve bu öğeler üzerinde bir QuerySet döndürür.
Bu bir test işlevidir:
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
Ve? Ne düşünüyorsun?