私が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
これどうやってするの?ありがとう。
それを機能させるには、明示的な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)
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加