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
您按的是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)
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |