以下のようなクエリセットオブジェクトを取得した場合
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'))
もう1つのオプションは、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
それがお役に立てば幸いです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加