请有人纠正我,但我想我已经找到了解决方案,至少对于我自己的情况而言。
我想处理所有属性完全等于...的元素。
但是我有几个模型,这个例程应该适用于所有模型。确实如此:
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)
使用这个通用子例程,我可以选择所有与我的“指定”(属性名、属性值)组合字典完全相同的元素。
第一个参数取一个(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"
## 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
然后呢?你怎么看?