Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:在模板中显示外键模型特定字段的平均值_Python_Django - Fatal编程技术网

Python Django:在模板中显示外键模型特定字段的平均值

Python Django:在模板中显示外键模型特定字段的平均值,python,django,Python,Django,我的系统包括两个模型,一个用于项目,另一个用于审查这些项目。每一篇评论都有许多不同的领域(多么有趣,多么友好等等) 我正在尝试查询DB,这样我就可以给出我目前参加的电影节的friendly(这是一个正在审查的领域)的平均分数(我猜是PK)。因为我是Django的新手,这个任务对我来说有点混乱。谢谢你的帮助 Models.py class Item(models.Model): ... class Review(models.Model): def get_absolute_url(self)

我的系统包括两个模型,一个用于项目,另一个用于审查这些项目。每一篇评论都有许多不同的领域(多么有趣,多么友好等等)

我正在尝试查询DB,这样我就可以给出我目前参加的电影节的friendly(这是一个正在审查的领域)的平均分数(我猜是PK)。因为我是Django的新手,这个任务对我来说有点混乱。谢谢你的帮助

Models.py

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" }}