Какая часть этого сбивает с толку?http://docs.djangoproject.com/en/1.2/ref/models/querysets/#in Кажется, очень ясно.
Из вопроса не совсем понятно, в чем проблема.
Вы спрашиваете, как использовать многокомпонентный ключ?Если это так, вы будете недовольны простым __in
.
Если вы пытаетесь найти «ИЛИ» ключа из двух частей, вам нужно создать более сложное условие.
Начните здесь: 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.