gpt4 book ai didi

mysql - Django - 对于在字典中传递的两个变量的循环

转载 作者:行者123 更新时间:2023-11-29 07:24:26 25 4
gpt4 key购买 nike

在我的 view.py 文件中,我有两个查询,每个查询都分配了一个变量名。查询 1 收集评论表中的所有评论。查询 2 计算评论表中每个评论的平均评分。两个查询,一张表。

我已将查询 1(名为 reviews)和 查询 2(名为 ratings)放在一个名为 context 的字典将被传递到我的 html 文件。

我的目标是显示每条评论和该评论的评分。但是,我无法使用当前方法正确显示它。这是我的 html 文件:

{% extends "reviews/layout.html" %}
{% block content %}
{% for review in reviews %}
{% for rating in ratings %}
<article class="media content-section">
<img class="rounded-circle article-img" src="{{ review.author.profile.image.url }}">
<div class="media-body">
<div class="article-metadata">
<h4 class="mr-2">{{ review.company }} {{ rating.rate }}</h4>
<small class="text-muted">{{ review.date_posted|date:"F d, Y" }}</small>
</div>
<h5><a class="article-title" href="{% url 'review-detail' review.id %}">{{ review.title }}</a></h5>
<p class="article-content">{{ review.content }}</p>
</div>
</article>
{% endfor %}
{% endfor %}
{% endblock content %}

我在 for 循环中有一个 for 循环。正如预期的那样,每个评论的结果都会针对每个平均值一遍又一遍地显示。例如,我有 7 条评论,评分为 7。结果看起来像这样:(注意:我将结果放在代码标签中以便更容易看到。)

Review 1, rating for review 1
Review 1, rating for review 2
Review 1, rating for review 3
Review 1, rating for review 4
Review 1, rating for review 5
Review 1, rating for review 6
Review 1, rating for review 7

Review 2, rating for review 1
Review 2, rating for review 2
....
Review 2, rating for review 7

相反,我的目标是看到:

Review 1, rating for review 1
Review 2, rating for review 2
Review 3, rating for review 3
Review 4, rating for review 4
...

我的 view.py 文件:


def reviews(request):
reviews = Review.objects.all()

ratings = Review.objects.filter(id__in=[review.id for review in reviews]).annotate(rate=(F('value1')+F('value2')+F('value3')+F('value4'))/4)

context = {
'reviews': reviews,
'ratings': ratings
}
return render(request, 'reviews/reviews.html', context)

我读过其他使用 zip() 的情况,但我认为不适用于我的情况?

我知道这是一个菜鸟挑战,但我是 Django 的新手,我正在学习。欢迎所有建议。

最佳答案

这可能只是个人偏好,但我喜欢结合相关的上下文字段。如果我对您的代码的理解正确,您希望对所有评分进行审核,这可以通过编辑 View 来实现。

def someview(request):
reviews = Review.objects.all()
review_list = []
for review in reviews:
ratings = Rating.objects.filter(review=review)
ratings_list = []
for rating in ratings:
ratings_list.append({
'rating_value':rating.value
})
review_list.append({
'id':review.pk
'ratings':ratings_list,
})
context = {'reviews':review_list}

然后在您的 html 中您可以执行以下操作:

{% for review in reviews %}
{% for rating in review.ratings %}
Review {{review.id}}, rating is {{rating.value}}
{% endfor %}
{% endfor %}

关于mysql - Django - 对于在字典中传递的两个变量的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54606216/

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