ПОЖАЛУЙСТА, меня поправят, но я думаю, что нашел решение, по крайней мере, для моего собственного случая.
Я хочу работать со всеми теми элементами, свойства которых в точности равны ... чему угодно.
Но у меня есть несколько моделей, и эта процедура должна работать для всех моделей. И это действительно так:
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)
С помощью этой универсальной подпрограммы я могу выбрать все те элементы, которые точно соответствуют моему словарю комбинаций «указать» (имя свойства, значение свойства).
Первый параметр принимает (models.Model),
второй словарь вроде: {"property1": "77", "property2": "12"}
И он создает оператор SQL, например
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
и возвращает QuerySet для этих элементов.
Это тестовая функция:
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
А также? Что вы думаете?