如果我得到如下所示的查询集对象
review_object = Review.objects.filter(property_id=prop.values('id')).annotate(total=Sum('star_rating'))
如何访问该对象以执行进一步的操作?为了扩展,我需要能够对每个 property_id 的“star_ rating”字段进行求和。我试过这个:
count_stars = 0
for ro in review_object:
count_stars += ro.star_rating
但这会显示所有属性的所有星星。
我尝试了聚合函数,但是这返回了一个字典对象,该对象在模板中渲染时不满足我的需求。如果需要,我可以提供更多信息。
有什么建议吗?
最佳答案
如果您想使用 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
希望有帮助。
关于python - 在 Django 中访问查询集数据并对其执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22992354/