TOLONG seseorang mengoreksi saya, tetapi saya rasa saya telah menemukan solusi, setidaknya untuk kasus saya sendiri.
Saya ingin mengerjakan semua elemen yang propertinya sama persis dengan ... apa pun.
Tapi saya punya beberapa model, dan rutinitas ini seharusnya bekerja untuk semua model. Dan memang:
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)
Dengan subrutin universal ini, saya dapat memilih semua elemen yang sama persis dengan kamus saya tentang kombinasi 'spesifik' (nama properti, nilai properti).
Parameter pertama mengambil (model.Model),
kamus kedua seperti: {"property1": "77", "property2": "12"}
Dan itu menciptakan pernyataan SQL seperti
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
dan mengembalikan QuerySet pada elemen tersebut.
Ini adalah fungsi uji:
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
Dan? Bagaimana menurut anda?