【发布时间】:2016-06-26 11:45:42
【问题描述】:
我有这些模型:
# 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):
self.slug = slugify(self.user.username)
super(UserProfile, self).save(*args, **kwargs)
def __unicode__(self):
return self.user.username
@property
def avg_rating(User):
return UserProfile.userrating_set.all().aggregate(Avg('rating'))['rating__avg']
# 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)
for_username = models.CharField(max_length=128)
rating = models.IntegerField(default=5)
def __unicode__(self):
return unicode(self.rating)
我想在我的模板中引用属性 (avg_rating) 的结果,以便显示每个用户的评分。我试过了,它显示空白结果:
{% for user in users %}
{{ user.profile.avg_rating }}
另外,这是被调用的视图:
def index(request):
user_list = User.objects.select_related().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)
我目前正在通过 Django 学习,如果这很明显很抱歉。
【问题讨论】:
-
正如塞尔丘克在他的回答中所说,问题出在
avg_rating属性上。请注意,模板可以隐藏这样的错误。如果您要添加新方法或属性,最好尝试在 shell 或视图中打印结果,然后您将看到错误消息而不是静默失败。
标签: python django django-models django-templates django-views