# Skill - перечень навыков. К примеру: есть, пить, курить, спать, бежать, кричать и т.д. class Skill(models.Model): name = models.CharField(max_length=50, verbose_name='Навык', db_index=True) # City - города (Гродно, Брест и т.д.) class City(models.Model): name = models.CharField(max_length=255, verbose_name='Город', db_index=True) # User - пользователь, который живет в одном конкретном городе и может иметь от 1 до n навыков class User(models.Model): name = models.CharField(max_length=30, verbose_name='Имя') city = models.ForeignKey(City, on_delete=models.PROTECT) skills = models.ManyToManyField(Skill, verbose_name='Навыки')
К примеру, в базе есть 3 пользователя:
1) Петя - живет в Гродно, умеет есть и пить
2) Маша - живет в Бресте, умеет есть, спать и кричать
3) Ваня - живет в Гродно, умеет курить
ВОПРОС
С сайта приходит запрос, что надо отобразить пользователей, которые живут в Гродно и умеют И есть, И пить, И курить.
В одной переменной я храню полученный город - request_city, к примеру, а в другой - список навыков (пусть будет skills_list)
Я делал таким образом:
result = User.objects.filter(city=request_city, skills__in=skills_list)
Я ожидал, что БД выберет именно те объекты, которые отвечают всем условиям фильтра. Но в результат приходит и Петя, и Ваня, хотя петя не умеет курить, а Ваня не умеет есть и пить.
Как описать обращение к БД, чтобы, если все переданные данные есть у человека, то он учитывался в результате, а если хоть одного нету, то человек не шёл в результат?