Как отфильтровать набор внешних ключей INSIDE? - PullRequest
0 голосов
/ 06 июня 2019

Есть две модели

class Question(models.Model):
    text = models.TextField()

class Vote(models.Model):
    cas_id = models.IntegerField()
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='votes')

Я хочу получить ВСЕ вопросы. Голосование каждого вопроса должно включать только голоса с cas_id=123. Набор голосов некоторых вопросов может быть пустым. SQL-запрос выглядит так:

with user_votes as (
  select *
  from votes
  where cas_id = 123
)
select *
from question q left join user_votes uv on q.id = uv.question_id;

Как я могу сделать это через django-ORM в одном запросе?

Я попробовал следующее.

  1. .filter(votes__cas_id=123) исключает дополнительные строки.
  2. 2 запроса и некоторый код работают нормально.

1 Ответ

1 голос
/ 07 июня 2019

Предварительная выборка с отдельным фильтром в запросе должна обрабатывать это:

Question.objects.all().prefetch_related(Prefetch('votes', queryset=Vote.objects.filter(cas_id=123)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...