在Django中访问和执行对查询集数据的操作

时间:2014-04-10 15:26:47

标签: python django

如果我得到如下所示的查询集对象

review_object = Review.objects.filter(property_id=prop.values('id')).annotate(total=Sum('star_rating'))

如何访问此对象以执行进一步操作?为了扩展,我需要能够总结“星级评论”。每个property_id的字段。我试过这个:

count_stars = 0
    for ro in review_object:
        count_stars += ro.star_rating

但是这会显示所有属性的所有星星。

我已经尝试了聚合函数但是这会返回一个字典对象,在模板中渲染时它不符合我的需要。如果需要,我可以提供更多信息。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您想使用django ORM获取每个属性ID的评级总和,则需要指定values()

review_object = Review.objects.values('property_id').annotate(total=Sum('star_rating'))

另一个选择是使用defaultdict总结每个属性的评级“在python中”:

from collections import defaultdict

review_object = Review.objects.all()
results = defaultdict(int)
for ro in review_object:
    results[ro.property_id] += ro.star_rating

希望有所帮助。