![](/img/trans.png)
[英]How to annotate queryset with number of common IDs in ManyToManyField
[英]How to annotate queryset if object in ManyToManyField
我正在嘗試建立一個小型社交網絡,用戶可以在其中喜歡帖子。 我正在使用 Django 3.1.7。 我為帖子定義了我的 model,如下所示:
class Post(models.Model):
date_published = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.CharField(max_length=240, blank=False, default=None)
user_like = models.ManyToManyField(User, blank=True, related_name='likes')
def __str__(self):
return f'{self.user.username} posted \"{self.content}\" on {self.date_published}'
從我的views.py
中,我想返回帶有當前用戶是否喜歡給定帖子的注釋的帖子。 我正在嘗試如下:
def index(request):
posts = Post.objects.all().annotate(
likes=Count('user_like')).order_by('-date_published')
if request.user.is_authenticated:
posts = Post.objects.all().annotate(
likes=Count('user_like'), liked=request.user in 'user_like'.all).order_by('-date_published')
paginator = Paginator(posts, 10)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, "network/index.html", {
'post_form': PostForm(),
'page_obj': page_obj
})
但不幸的是,我無法使查詢工作。 我假設我檢查用戶是否處於關系中的部分是錯誤的( liked=request.user in 'user_like'.all
),因為它將'user_like'
視為str
而不是 Post 中的字段。
我應該如何根據它們之間的ManyToManyField
注釋帖子以包括用戶是否喜歡它們? 謝謝
您可以使用Exists
子查詢[Django-doc] :
from django.db.models import Exists, OuterRef
posts = Post.objects.annotate(
likes=Count('user_like'),
liked=Exists(Post.user_like.through.objects.filter(
post_id=OuterRef('pk'),
user_id=request.user.pk
))
).order_by('-date_published')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.