Django - 注释字典无法在模板中正确显示

时间:2018-05-03 12:38:14

标签: python django

我在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

1 个答案:

答案 0 :(得分:1)

avgRating个对象的数组,这正是您在渲染中看到的内容。试试{{ rating.user_rated }}

在回答第二个问题时,您需要将Rating表加入UserProfileUser表,假设User表包含用户的名称。有关如何执行此操作,请参阅this link