Zapytanie o filtr Django na „krotkach” wartości dla wielu kolumn

Powiedz, że mam model:

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

i mówię, że mam listę 2 imion:first_list = ['Bob', 'Rob'] Mam listę 2 nazwisk:last_list = ['Williams', 'Williamson']. Potem, jeśli chciałbym wybrać wszystkich, których imię brzmiałofirst_list Mógłbym biec:

Person.objects.filter(firstname__in=first_list)

a jeśli chciałbym wybrać wszystkich, których nazwisko było w środkulast_list, Mógłbym zrobić:

Person.objects.filter(lastname__in=last_list)

Jak na razie dobrze. Jeśli chcę uruchomić oba te ograniczenia jednocześnie, to proste ...

Person.objects.filter(firstname__in=first_list, lastname__in=last_list)

Gdybym chciał zrobićor wyszukiwanie stylu zamiastand szukam stylu, mogę to zrobićQ obiekty:

Person.objects.filter(Q(firstname__in=first_list) | Q(lastname__in=last_name))

Ale mam na myśli coś bardziej subtelnego. Co zrobić, jeśli chcę zwrócić zestaw zapytań zwracający określone kombinacje imion i nazwisk? To znaczy. Chcę zwrócićPerson przedmioty, dla których(Person.firstname, Person.lastname) jest wzip(first_names, last_names). To znaczy. Chcę odzyskać kogokolwiek o nazwisku Bob Williams lub Rob Williamson (ale nie nikogo o nazwisku Bob Williamson lub Rob Williams).

W moim rzeczywistym przypadku użyciafirst_list ilast_list obaj mieliby ~ 100 elementów.

W tej chwili muszę rozwiązać ten problem w aplikacji Django. Ale jestem też ciekawy, jak najlepiej poradzić sobie z tym w bardziej ogólnym kontekście SQL.

Dzięki! (I proszę daj mi znać, jeśli mogę coś wyjaśnić.)

questionAnswers(2)

yourAnswerToTheQuestion