1

私はこのモデルを持っています

class Book(models.Model):
    title = models.CharField(max_length=255, blank=False, null=False)

class Like(models.Model):
    user = models.ForeignKey(User, related_name="like_user", blank=False, null=False)
    book = models.ForeignKey(Book, related_name="like_book", blank=False, null=False)
    class Meta:
        unique_together = ["user", "book"]

すべての本を取得して、現在のユーザーが 1 回のリクエストで各本を気に入っているかどうかを確認したい

Book.objects.select_related('like_book').all()

多くの結果のために機能しません

Book.objects.prefetch_related('like_book').all()

はキャッシュlike_setされますが、このブックのすべてのいいね! が含まれます。このユーザーには 1 つだけではありません。

最後に、追加のフィールドが必要ですis_liked

books = Book.objects.MAGIC_FETCH('like_book', user=self.request.user).all()
books[0].is_liked
4

1 に答える 1

2

* コメントに対応するために更新されました *

大まかに言えば、これはあなたが使うものだと思います:

Book.objects.annotate(is_liked=Case(When(like__user=self.request.user, then=True), default=False))
于 2016-04-20T01:49:46.133 に答える