gpt4 book ai didi

python - 查询模板中与当前用户相关的项目

转载 作者:行者123 更新时间:2023-12-01 08:29:09 24 4
gpt4 key购买 nike

我的 Django 应用程序中有两个模型,如下所示:

class Movie(models.Model):
title = models.CharField()
# some movie-related fields

class Rating(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
score = models.IntegerField()

因此用户可以对他们想要的任何电影进行评分。我还有一个名为 index.html 的模板,以下是我如何使用 views.py 将数据发送到此模板:

def index(request):
movies_list = Movie.objects.all()
paginator = Paginator(movies_list, 8)
page = request.GET.get('page')
movies = paginator.get_page(page)
return render(request, 'index.html', {'movies': movies})

index.html:

{% for movie in movies %}
{{movie.title}} <br />
# The rating score that current user has gave to this movie in the iteration
{% endfor %}

我已尝试以下操作,但它显示所有用户对电影给出的所有分数,而不仅仅是当前用户:

{% for rating in movie.rating_set.all %}
{{rating.score}}
{% endfor %}

如何在 index.html 页面中显示当前用户(正在观看电影页面)对电影的评分?

最佳答案

可以用子查询来解决,不需要从模板中查询。方法如下。

from django.db.models import OuterRef, Subquery

def index(request):
score = Rating.objects.filter(movie=OuterRef('pk'), user=request.user).values('score')
movies_queryset = Movie.objects.annotate(user_score=Subquery(score[:1]))
paginator = Paginator(movies_queryset, 8)
page = request.GET.get('page')
movies = paginator.get_page(page)
return render(request, 'index.html', {'movies': movies})

然后只需使用 user_score 即可访问该值。

{% for movie in movies %}
{{movie.title}} <br />
{{ movie.user_score }}
{% endfor %}

关于python - 查询模板中与当前用户相关的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54006651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com