다음 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] 삭제
몇 마디 만하겠습니다