Фильтр запросов 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.
Спасибо! (И, пожалуйста, дайте мне знать, если я смогу что-то уточнить.)