我需要从数据库中获取带有评论计数的条目。我可以用django的评论框架来做吗?我也在使用一个不使用GenericForeignKeys的投票申请表,我得到的分数如下:
class EntryManager(models.ModelManager):
def get_queryset(self):
return super(EntryManager,self).get_queryset(self).all().annotate(\
score=Sum("linkvote__value"))
但是当有外国人我被困住了。你有什么想法吗?
额外的解释:我需要获取这样的条目:
id | body | vote_score | comment_score |
1 | foo | 13 | 4 |
2 | bar | 4 | 1 |
这样做之后,我可以通过comment_score订购它们。 :)
满足所有回复。
答案 0 :(得分:1)
显然,使用反向泛型关系(或一般的额外过滤器)进行注释仍然是open ticket(另请参阅corresponding documentation)。在此问题得到解决之前,我建议在extra
查询中使用原始SQL,如下所示:
return super(EntryManager,self).get_queryset(self).all().annotate(\
vote_score=Sum("linkvote__value")).extra(select={
'comment_score': """SELECT COUNT(*) FROM comments_comment
WHERE comments_comment.object_pk = yourapp_entry.id
AND comments_comment.content_type = %s"""
}, select_params=(entry_type,))
当然,您必须填写正确的表名。此外,entry_type
是一个“常量”,可以在查找函数之外设置(参见ContentTypeManager):
from django.contrib.contenttypes.models import ContentType
entry_type = ContentType.objects.get_for_model(Entry)
这假设你有一个模型Entry
,你想要计算你的分数。否则,事情会变得稍微复杂一些:你需要一个子查询来获取每个带注释对象类型的内容类型id。