Page 1 of 1

Django Filter Queryset auf "Tupel" von Werten für mehrere Spalten

Posted: 16 Feb 2025, 15:31
by Anonymous
Sag, ich habe ein Modell: < /p>

Code: Select all

Class Person(models.Model):
firstname = models.CharField()
lastname = models.CharField()
birthday = models.DateField()
# etc...
< /code>

und sagen, ich habe eine Liste mit 2 Vornamen: First_list = ['Bob', 'Rob'] < /code> und ich habe eine Liste mit 2 Nachnamen : last_list = ['Williams', 'Williamson'] 
. Wenn ich dann jeden auswählen wollte, dessen Vorname in First_List < /code> ich ausführen konnte: < /p>

Code: Select all

Person.objects.filter(firstname__in=first_list)
< /code>

Und wenn ich jeden auswählen wollte, dessen Nachname in last_list < /code> war, könnte ich es tun: < /p>

Person.objects.filter(lastname__in=last_list)
< /code>

So gut, so gut.  Wenn ich beide Einschränkungen gleichzeitig ausführen möchte, ist das einfach ... < /p>

Person.objects.filter(firstname__in=first_list, lastname__in=last_list)
Wenn ich die Suche nach oder Style anstelle der und Stilsuche durchführen wollte, kann ich dies mit Q Objekten tun : < /p>

Code: Select all

Person.objects.filter(Q(firstname__in=first_list) | Q(lastname__in=last_name))
< /code>

Aber was ich im Sinn habe, ist etwas Subtileres.  Was ist, wenn ich nur einen Queryset zurückgeben möchte, der bestimmte Kombinationen von First und Nachnamen zurückgibt?  D.h. Ich möchte die Person 
Objekte zurückgeben, für die (Person.firstname, Person.lastName) in ZIP (First_names, last_names) ist. D.h. Ich möchte jemanden namens Bob Williams oder Rob Williamson zurückbekommen (aber nicht jemanden namens Bob Williamson oder Rob Williams). < /p>

In meinem tatsächlichen Anwendungsfall hätte First_list < /code> und last_list < /code> beide ~ 100 Elemente. < /p>

Im Moment muss ich dieses Problem in einer Django -App lösen. Aber ich bin auch neugierig auf den besten Weg, um dies in einem allgemeineren SQL -Kontext zu bewältigen. < /P>

Danke! (Und bitte lassen Sie mich wissen, ob ich etwas klären kann.)