Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Помощь в написании запроса к базе данных [RSS Feed]

#1 Март 26, 2022 21:33:41

DmBand
Зарегистрирован: 2021-02-03
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь в написании запроса к базе данных

Есть модели:

 # 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)

Я ожидал, что БД выберет именно те объекты, которые отвечают всем условиям фильтра. Но в результат приходит и Петя, и Ваня, хотя петя не умеет курить, а Ваня не умеет есть и пить.
Как описать обращение к БД, чтобы, если все переданные данные есть у человека, то он учитывался в результате, а если хоть одного нету, то человек не шёл в результат?

Отредактировано DmBand (Март 26, 2022 21:36:33)

Офлайн

#2 Март 27, 2022 01:14:12

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

Помощь в написании запроса к базе данных

.filter(skills='курить').filter(skills='пить')..filter(skills='есть')

Офлайн

#3 Март 30, 2022 00:12:24

DmBand
Зарегистрирован: 2021-02-03
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь в написании запроса к базе данных

VadimK
.filter(skills='курить').filter(skills='пить')..filter(skills='есть')
Я делал такое через цикл for, но результат не поменялся

Офлайн

  • Начало
  • » Django
  • » Помощь в написании запроса к базе данных[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version