【发布时间】:2017-09-27 03:25:04
【问题描述】:
我需要这样的显示:
{% if user_rate %}
<h2><a href="/games/{{game.id}}/{{game.slug}}/add_rate/edit/{{rate.id}}/">Edit rate</a></h2>
{% else %}
<h2><a href="/games/{{game.id}}/{{game.slug}}/add_rate">Add rate</a></h2>
{% endif %}
但是当我使用时(如果我评价第一场比赛)
user_rate = Rate.objects.filter(user=request.user)
它在游戏中向我显示“编辑”,没有费率。 objects.get() 给我:
“get() 返回了多个 Rate -- 它返回了 2!”
我想显示
{% for x in user_rate %}
Your rate : {{x.rate}}
{% endfor %}
但这也会显示用户在所有游戏中的评分。我在 cmets 中具有相同的结构并且它可以工作,我只看到我在这个游戏中的 cmets,但我不知道为什么它不适用于游戏的速率......
class Rate(models.Model):
game = models.ForeignKey(Games)
user = models.ForeignKey(User)
rate = models.IntegerField(validators=[MinValueValidator(1),
MaxValueValidator(10)])
class Meta:
unique_together = ['game', 'user']
views.py
def game(request, game_id, slug):
game = Games.objects.get(id = game_id)
genre = game.genres.all()
platform = game.platforms.all()
quantity = Games.objects.all().count()
user = User.objects.all().count()
number_of_rates = Rate.objects.filter(game_id = game_id).count()
rate_average = Rate.objects.filter(game_id = game_id).aggregate(Avg("rate")).values()[0]
if request.user.is_authenticated():
user_rate = Rate.objects.filter(user=request.user)
ctx = {'game' : game, 'genre' : genre, 'platform' : platform, 'quantity' :quantity, \
'user' : user, 'rate_average' : rate_average, 'user_rate': user_rate, \
'number_of_rates' : number_of_rates}
return render(request, 'game.html', ctx)
else:
ctx = {'game' : game, 'genre' : genre, 'platform' : platform, 'quantity' :quantity, \
'user' : user, 'rate_average' : rate_average, 'number_of_rates' : number_of_rates}
return render(request, 'game.html', ctx)
【问题讨论】:
-
你需要有一个标志来表明用户是否已经评分。
-
这个标志怎么做?
-
从视图发送标志
-
可能的例子?
标签: django django-templates django-views