【问题标题】:Django filter liked Posts by UserDjango 过滤用户喜欢的帖子
【发布时间】:2020-12-12 06:56:44
【问题描述】:

后模型

class Post(models.Model):
    likes = models.ManyToManyField(User, related_name="liked_by", blank=True)

我正在尝试查询特定用户喜欢的所有帖子,但找不到正确的 __ 查询。 这是我正在尝试进行的查询。

Post.objects.filter(likes__liked_by=User.objects.get(pk=1))

我怎样才能做到这一点?

【问题讨论】:

  • 这是 django-orm 吗?
  • @MaximilianBurszley 是的

标签: python django django-orm


【解决方案1】:

您可以使用prefetch_related进行如下查询。

User.objects.prefetch_related('liked_by').get(pk=1).liked_by.all()

【讨论】:

  • 它有效,但这个或@RBowen 的答案有什么区别?
  • 这里不需要做prefetch_related,如果查询多条记录会用到更多的优化
  • django 将执行单独的查询,如果我们这样做的话。 user = user.objects.get(pk=1) user.liked_by.all() 一个获取用户,另一个获取所有相关帖子。但是,如果我们使用prefetch_related,它将只执行带有连接的查询。您可以通过查看查询的用户对象字典来检查。 user.__dict__
【解决方案2】:

您可能想以相反的方式看待它,所以请通过

User.objects.get(pk=1).liked_by.all()

【讨论】:

    猜你喜欢
    • 2020-09-03
    • 2020-11-04
    • 1970-01-01
    • 2019-08-13
    • 2019-10-06
    • 2021-10-21
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多