XIN người nào đó sửa tôi, nhưng tôi đoán tôi đã tìm được 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 yếu tố có thuộc tính chính xác bằng ... bất kỳ điều gì.
Nhưng tôi có một số mô hình và quy trình này sẽ hoạt động đối với tất cả các kiểu máy. Và điều đó có nghĩa là:
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 'xác định' (thuộc tính, giá trị thuộc tính).
Tham số đầu tiên mất một (models.Model),
thứ hai một cuốn từ điển 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 yếu 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?
Đó là trong SQLAlchemy: http://docs.sqlalchemy.org/en/latest/orm/extensions/hybrid.html và bạn có thể kết nối django với SQLAlchemy qua https://pypi.python.org/pypi/aldjemy nhưng tôi nghi ngờ rằng cả hai có thể được kết nối theo cách bạn muốn họ được. – rattray