Python Django:在模板中显示外键模型特定字段的平均值
我的系统包括两个模型,一个用于项目,另一个用于审查这些项目。每一篇评论都有许多不同的领域(多么有趣,多么友好等等) 我正在尝试查询DB,这样我就可以给出我目前参加的电影节的friendly(这是一个正在审查的领域)的平均分数(我猜是PK)。因为我是Django的新手,这个任务对我来说有点混乱。谢谢你的帮助 Models.pyPython Django:在模板中显示外键模型特定字段的平均值,python,django,Python,Django,我的系统包括两个模型,一个用于项目,另一个用于审查这些项目。每一篇评论都有许多不同的领域(多么有趣,多么友好等等) 我正在尝试查询DB,这样我就可以给出我目前参加的电影节的friendly(这是一个正在审查的领域)的平均分数(我猜是PK)。因为我是Django的新手,这个任务对我来说有点混乱。谢谢你的帮助 Models.py class Item(models.Model): ... class Review(models.Model): def get_absolute_url(self)
class Item(models.Model):
...
class Review(models.Model):
def get_absolute_url(self):
return reverse('festival_list:single', args=[self.festival.pk])
item = models.ForeignKey(
Item,
related_name='Item_Reviews',
on_delete=models.CASCADE,
null=False,
blank = False,
)
bad = 0
okay = 1
good = 2
great = 3
superb = 4
score_choices = (
(0, 'Bad'),
(1, 'Okay'),
(2, 'Good'),
(3, 'Great'),
(4, 'Superb'),
)
friendly = models.IntegerField(
choices=score_choices,
default=score_choices[0],
)
Views.py:
class DetailItem(generic.DetailView):
queryset = models.Item.objects.all()
def get_context_data(self, **kwargs):
context = super(DetailItem, self).get_context_data(**kwargs)
context['item_reviews'] = models.Review.objects.all()
return context
Item_detail.html:
<h4>Friendly</h4>
<p>
{% for score in item_reviews %}
{{ ?? }}
{% endfor %}
</p>
友好
{项目中的分数为%}
{{ ?? }}
{%endfor%}
您可以使用聚合计算平均值:
def获取上下文数据(自身,**kwargs):
context=super(DetailItem,self)。获取上下文数据(**kwargs)
# ...
上下文['avg_-friendly']=self.object.Item_-Reviews.aggregate(
avg_friendly=avg(‘friendly’)
)[“平均友好型”]
# ...
返回上下文
或更短:
def获取上下文数据(自身,**kwargs):
context=super(DetailItem,self)。获取上下文数据(**kwargs)
# ...
context.update(self.object.Item_Reviews.aggregate(
avg_friendly=avg(‘friendly’)
))
# ...
返回上下文
这里的self.object.Item_Reviews
将给出给定对象的相关Review
s(单独的项
)
因此,这里的上下文包含一个变量avg_-friendly
,该变量包含相关评论的friendly
视图的平均值
因此,您可以使用以下方式渲染此内容:
{{ avg_friendly }}
如果没有相关审查,平均值将为None
,因此我们可以使用:
{{avg_-friendly | default_如果没有:“还没有评论”}
{{ avg_friendly|default_if_none:"no reviews yet" }}