django - 从 django 查询集中排除那些在另一个模型的查询集中引用的结果

标签 django django-queryset

我正在使用 Django 并且有两个类:

class PR(models.Model):
  Jq = models.ForeignKey(JQ)
  user = models.ForeignKey(User)
  (snip)
  def __unicode__(self):
        return self.name

class JQ(models.Model):
  a = models.ForeignKey(A)
  (snip)
  def __unicode__(self):
        return self.name

我想执行一个查询,在其中我抓取所有不属于指定用户的 PR 的 JQ。
现在,我正在这样做:
 jq = JQ.objects.filter(somefield=someval)
 pr = PR.objects.filter(user=request.user.id)
 for r in pr:
   jq = jq.exclude(id=r.Jq.id)

也就是说,我获取所有 JQ,然后获取引用给定用户的所有 PR。我正在遍历所有 PR,并排除至少一个 PR 引用的 JQ。然而,这是非常低效的。有什么建议?

(顺便说一句,在 native SQL 中,我可能会创建该用户 PR 的临时表,然后将该临时表与 JQ 连接起来,并且只保留用户 PR 中不匹配的行。)

感谢您的帮助!

最佳答案

 pr = PR.objects.filter(user=request.user.id).values_list('jq__id', flat=True)
 jq = JQ.objects.filter(somefield=someval).exclude(id__in=pr)

第一行返回一个 id 列表(例如 [12, 14, 110])。然后在排除中使用这些 ID。

关于django - 从 django 查询集中排除那些在另一个模型的查询集中引用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017408/

相关文章:

mysql - 无法在 Windows 上安装 python mysqlclient

javascript - 如何在不使用表单的情况下从模板调用 django 方法?

python - url中的当前参数在django中的下一个url中设置

django - manytomany 上的查询过滤器为空

python - NameError at/name 'article_finish_date' 未定义

django - 查询字段值 - 返回未定义的全局名称

python - Django:使用 'can_order' 更改 FormSet 中表单的顺序

python - 如何在 Django Rest Framework 中将数组序列化为字符串?

python - 如何聚合查询集中多个日期范围的总和?

python - 对象不可迭代 : Filtering QuerySet to display latest instance