在基于类的ListView中,我想用注释数量注释每个Post(此方法有效)
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['approved_comments'] = Comment.objects.values('post_id').annotate(c_count=Count('post_id')).filter(approved=True)
return context
在我的模板中,我执行以下操作(感觉效率很低)
{% for comment in approved_comments %}
{% if post.id == comment.post_id %}
{{comment.c_count}}
{% endif %}
{% endfor %}
这为我带来了我想要的结果,但是我正在努力寻找一种更好的方法来实现这一目标,因为这似乎真的很多余。
我试图找到一个已经解决了这个问题的SO问题,但还没有找到一个问题,因此,如果您能指出我对这个链接的帮助,将会很有帮助。
提前致谢 :)
这是一个二次JOIN,您不应该这样做。您可以Post
在视图中简单地用批准的注释数对进行注释:
from django.db.models import Count, Q
from django.views.generic import ListView
class MyListView(ListView):
model = Post
queryset = Post.objects.annotate(
napproved_comments=Count('comment', filter=Q(comment__approved=True))
)
然后使用以下命令将其呈现在模板中:
{{ post.napproved_comments }}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句