Welcher Teil davon ist verwirrend? http://docs.djangoproject.com/en/1.2/ref/models/querysets/#in Es scheint sehr klar zu sein.
Aus der Frage geht nicht eindeutig hervor, worin das Problem besteht.
Fragen Sie, wie man einen mehrteiligen Schlüssel verwendet? Wenn ja, werden Sie mit einer einfachen Taste unglücklich sein. __in
.
Wenn Sie nach einem "ODER" eines zweiteiligen Schlüssels suchen, müssen Sie eine komplexere Bedingung schaffen.
Beginnen Sie hier: 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))
Wenn Sie nach mehreren Schlüsseln suchen wollen, muss es auf diese Weise funktionieren.
Oder liegt das Problem darin, dass Ihre "in"-Klausel eine lange Liste von spezifischen Werten enthält?
Wenn Sie eine lange Liste haben, sollten Sie die Abfrage in Teilen erstellen.
q_obj= Q()
for p, s in some_list_of_pairs;
q_obj |= Q(productnr=p, supplier_id=s )
product_list.filter(q_obj)
Diese Angaben sind nicht geprüft. Außerdem ist es wahrscheinlich ineffizient.
Besser ist so etwas wie das hier.
def values_iter( some_list_of_pairs ):
for p, s in some_list_of_pairs
yield product_list.get(productnr=p, supplier_id=s)
Dadurch wird eine Reihe von sehr effizienten SQL-Abfragen nacheinander durchgeführt. Das kann schneller gehen als die Erstellung einer komplexen IN-Klausel mit mehreren Schlüsseln.