def get_ratings(self, obj):
score = None
if obj.type == USER_TYPE_DEVELOPER:
query = Rating.objects.filter(
tasks__closed=True, tasks__participants=obj, tasks__participation__status=STATUS_ACCEPTED
).order_by('criteria')
details = query.values('criteria').annotate(avg=Avg('score'))
criteria_choices = dict(Rating._meta.get_field('criteria').flatchoices)
for rating in details:
rating['display_criteria'] = criteria_choices[rating['criteria']]
rating['display_avg'] = rating['avg'] and '{:0,.0f}%'.format(rating['avg']*10)
avg = query.aggregate(avg=Avg('score'))['avg']
score = {'avg': avg, 'display_avg': avg and '{:0,.0f}%'.format(avg*10) or None, 'details': details}
return score
评论列表
文章目录