如何过滤INSIDE外键集?

时间:2019-06-06 18:17:59

标签: python sql django postgresql

有两种型号

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 个答案:

答案 0 :(得分:1)

在查询中具有单独过滤器的预取应处理以下问题:

Question.objects.all().prefetch_related(Prefetch('votes', queryset=Vote.objects.filter(cas_id=123)))