我在models.py中得到了这些模型
class Rating(models.Model):
stars = models.IntegerField()
user_rating = models.ForeignKey(UserProfile, related_name="rater", on_delete=models.CASCADE)
user_rated = models.ForeignKey(UserProfile, related_name="rated", on_delete=models.CASCADE)
ride_number = models.ForeignKey(Ride, related_name="rider", on_delete=models.CASCADE)
class UserProfile(models.Model):
user = models.ForeignKey(User)
我的观点
def user_view(request):
avg = user_avg
total = user_count
context = {
'avg': avg,
'total': total
}
return render(request, 'rating/home.html', context)
def user_avg():
avg = (Rating.objects
.values('user_rated').annotate(Avg('stars'))
.distinct())
return avg
最后我的模板看起来像这样
{% for rating in avg %}
{{ avg }}
{% endfor %}
现在它像这样呈现;
[{'user_rated': 1L, 'stars__avg': 3.2222}, {'user_rated': 2L, 'stars__avg': 3.625}] [{'user_rated': 1L, 'stars__avg': 3.2222}, {'user_rated': 2L, 'stars__avg': 3.625}]
我已经尝试将模板更改为{{ avg.user_rated }}
,但后来却没有任何内容,所以我不确定我在这里做错了什么。我如何获得用户平均评级的名称而不是user_rated
答案 0 :(得分:1)
avg
是Rating
个对象的数组,这正是您在渲染中看到的内容。试试{{ rating.user_rated }}
。
在回答第二个问题时,您需要将Rating
表加入UserProfile
和User
表,假设User
表包含用户的名称。有关如何执行此操作,请参阅this link。