如何显示评分最高的 5 位用户?姜戈

Sei*_*eif 0 django django-templates django-models django-views

我想显示评分最高的 5 位用户。然而,它们目前没有显示有序,当我向用户添加两个评级时,它会出现两次,而不是计算平均值并放在正确的位置。

这些是模型:

# this is model for user
class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='profile')
    profilepic = models.ImageField(blank=True)
    city = models.ForeignKey(City)
    slug = models.SlugField(unique=True)


    def save(self, *args, **kwargs):
        # Uncomment if you don't want the slug to change every time the name changes
        self.slug = slugify(self.user.username)
        super(UserProfile, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.user.username

# this is the model for user ratings - one to many relationship with User
class UserRating(models.Model):
    user = models.ForeignKey(User)
    comment = models.CharField(max_length=500)
    rating = models.IntegerField(default=5)

    def __unicode__(self):
        return unicode(self.rating)
Run Code Online (Sandbox Code Playgroud)

这是视图:

def index(request):
    user_list = User.objects.select_related().annotate(rating=Avg('userrating__rating')).order_by('-userrating')[:5]    
    city_list = City.objects.order_by('name')[:5]

    context_dict = {"users": user_list, "cities" : city_list}

    return render(request, "index.html", context_dict)
Run Code Online (Sandbox Code Playgroud)

这是在模板中引用它的方式:

 {% for user in users %}
{{ user.rating }}
Run Code Online (Sandbox Code Playgroud)

这是页面上的结果 -> 无序且重复:

超级明星

nikkityler Nikki Tyler 来自苏格兰格拉斯哥,50.0

nikkityler Nikki Tyler 来自苏格兰格拉斯哥,100.0

darrenhart 达伦哈特 来自德国慕尼黑, 0.0

darrenhart Darren Hart 来自德国慕尼黑,35.0

bunnyschultz 来自西班牙马德里的兔子,5.0

Say*_*yse 5

您按的是userrating而不是您的注释进行排序

user_list = User.objects.select_related().annotate(rating=Avg('userrating__rating')).order_by('-rating')[:5]
Run Code Online (Sandbox Code Playgroud)

另请注意,它user已由 Django 上下文处理器定义,因此您可能希望在循环中给出不同的模板变量

{% for my_user in users %}    
    {{ my_user.rating }}
Run Code Online (Sandbox Code Playgroud)