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. [url=viewtopic.php?t=14917]Ich möchte[/url] 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