我想获得与用户相关的所有评分的平均值
UserRating类(models.Model):
User_Name=models.ForeignKey(MyUser,on_delete=models.CASCADE)
Rating = models.IntegerField(
default=1,
validators=[MaxValueValidator(5), MinValueValidator(1)]
)
def __str__(self):
return str(self.User_Name)
UserRatingViewSet(viewsets.ViewSet)类:
def create(self,request):
try:
User_Name=request.data.get('User_Name')
Rating=request.data.get('Rating')
new=UserRating()
new.User_Name=MyUser.objects.get(user_name=User_Name)
new.Rating=Rating
new.save()
return Response({"Data":"Delivered"})
except Exception as error:
return Response({"message":str(error),"success":False})
def list(self,request):
ashu=UserRating.objects.all()
print(ashu)
a=[]
for i in ashu:
a.append({
"User_Name":i.User_Name.user_name,
"Rating":i.Rating,
})
return Response({"message":a})
答案 0 :(得分:1)
要获取每个用户的所有平均值列表,您可以执行以下操作:
from django.db.models import Avg
user_ratings = UserRating.objects.all().values('User_Name').order_by('User_Name').annotate(rating_average=Avg('Rating'))
建议不要使用for,这样,由于直接在数据库中完成,因此性能更好。
答案 1 :(得分:0)
ashu = UserRating.objects.all()
dict = {}
for line in ashu:
if dict.get(line.User_Name.user_name):
dict[line.User_Name.user_name] = (dict[line.User_Name.user_name] + line.Rating)/2
else:
dict.update({line.User_Name.user_name:line.Rating})
print(dict)
喜欢吗?