这其中的哪一部分令人困惑?http://docs.djangoproject.com/en/1.2/ref/models/querysets/#in http://docs.djangoproject.com/en/1.2/ref/models/querysets/#in看起来很清楚。
从问题中还不能完全清楚问题是什么。
您想问如何使用多部分密钥吗?如果是这样,你会对简单的事情感到不满意__in
.
如果您尝试查找由两部分组成的密钥的“OR”,则必须创建更复杂的条件。
从这里开始:http://docs.djangoproject.com/en/1.2/topics/db/queries/#complex-lookups-with-q-objects http://docs.djangoproject.com/en/1.2/topics/db/queries/#complex-lookups-with-q-objects
from django.db.models import Q
product_list.filter(
Q(productnr='OB520', supplier_id=3) | Q(productnr='RH402', supplier_id=20))
如果您尝试进行多键查找,这就是它的工作方式。
或者,问题是您的“in”子句有一长串特定值?
如果您的列表很长,您可能需要分段构建查询。
q_obj= Q()
for p, s in some_list_of_pairs;
q_obj |= Q(productnr=p, supplier_id=s )
product_list.filter(q_obj)
以上未经测试。而且,它可能效率低下。
更好的是这样的。
def values_iter( some_list_of_pairs ):
for p, s in some_list_of_pairs
yield product_list.get(productnr=p, supplier_id=s)
这将一次执行许多非常高效的 SQL 查找。这可能比构建复杂的多键 IN 子句执行得更快。