XIN ai đó sửa cho tôi, nhưng tôi đoán tôi đã tìm thấy một giải pháp, ít nhất là cho trường hợp của riêng tôi.
Tôi muốn làm việc trên tất cả các phần tử có thuộc tính chính xác bằng ... bất cứ thứ gì.
Nhưng tôi có một số mô hình và quy trình này sẽ hoạt động cho tất cả các mô hình. Và nó có:
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)
Với chương trình con phổ quát này, tôi có thể chọn tất cả các phần tử đó chính xác bằng từ điển của tôi về các tổ hợp 'chỉ định' (tên thuộc tính, giá trị thuộc tính).
Tham số đầu tiên nhận a (models.Model),
từ điển thứ hai như: {"property1": "77", "property2": "12"}
Và nó tạo ra một câu lệnh SQL như
SELECT * from appname_modelname WHERE property1 = '77' AND property2 = '12'
và trả về một QuerySet trên các phần tử đó.
Đây là một chức năng kiểm tra:
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
Và? Bạn nghĩ sao?