Фильтр запросов Django для «кортежей» значений для нескольких столбцов

Скажем, у меня есть модель:

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

и сказать, у меня есть список из 2 имен:first_list = ['Bob', 'Rob'] И у меня есть список из 2 фамилий:last_list = ['Williams', 'Williamson'], Тогда, если я хочу выбрать всех, чье имя было вfirst_list Я мог бы бежать:

Person.objects.filter(firstname__in=first_list)

и если бы я хотел выбрать всех, чья фамилия была вlast_list, Я мог бы сделать:

Person.objects.filter(lastname__in=last_list)

Все идет нормально. Если я хочу запустить оба эти ограничения одновременно, этолегко ...

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

Если бы я хотел сделатьor поиск стиля вместоand поиск стиля, я могу сделать это сQ объекты:

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

Но я имею в виду нечто более тонкое. Что если я просто хочу вернуть набор запросов, который возвращает конкретные комбинации имен и фамилий? То есть Я хочу вернутьPerson объекты для которых(Person.firstname, Person.lastname) вzip(first_names, last_names), То есть Я хочу вернуть кого-нибудь по имени Боб Уильямс или Роб Уильямсон (но никого по имени Боб Уильямсон или Роб Уильямс).

В моем реальном случае использования,first_list а такжеlast_list у обоих будет ~ 100 элементов.

На данный момент мне нужно решить эту проблему в приложении Django. Но мне также интересно узнать, как лучше справиться с этим в более общем контексте SQL.

Спасибо! (И, пожалуйста, дайте мне знать, если я смогу что-то уточнить.)

Ответы на вопрос(2)

Ваш ответ на вопрос