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

Python-Programme
Anonymous
 Django Filter Queryset auf "Tupel" von Werten für mehrere Spalten

Post 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.)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post