假设我有一个像这样的 Book
模型:
class Book(models.Model)
title = models.Charfield(...)
likes = models.ManyToMany(User, related_name="books_liked")
我需要为当前登录的用户使用 is_liked
字段注释查询集。
我在视图中有这个,但它不起作用:
user = self.request.user
qs = Book.objects.all().annotate(is_liked=Exists(user.books_liked.all()))
return qs
所以我可以在模板中使用类似的东西
{% for book in books %}
{% if book.is_liked %}
...
{% endif %}
{% endfor %}
我正在检查这个文档部分,但我不太确定如何继续或者是否是正确的方法。
https://docs.djangoproject.com/en/3.1/ref/models/expressions/#exists-subqueries
我该怎么做?谢谢。
答案 0 :(得分:0)
为了让它工作,我必须创建一个明确的 Like 模型:
class Like(models.Model):
book = models.ForeignKey(
Book, on_delete=models.CASCADE,
)
user = models.ForeignKey(
User, on_delete=models.CASCADE,
)
并删除 ManyToMany
Book
关系
然后在视图中:
qs = super().get_queryset()
user_likes = Like.objects.filter(
book=OuterRef("pk"),
user=self.request.user
)
return Book.objects.annotate(
is_liked=Exists(user_likes)
)