Django 在相关对象上运行注释或聚合并在模板中渲染?
我试图在我的视图中计算/找到最大值/平均值等,然后在模板中渲染它们,但我似乎不知道如何使其全部工作。需要对相关对象进行计算,我觉得我已经尝试了所有方法。我不知所措 views.pyDjango 在相关对象上运行注释或聚合并在模板中渲染?,django,Django,我试图在我的视图中计算/找到最大值/平均值等,然后在模板中渲染它们,但我似乎不知道如何使其全部工作。需要对相关对象进行计算,我觉得我已经尝试了所有方法。我不知所措 views.py def program_detail_view(request, primary_key): survey = Survey.objects.get(pk=primary_key) maxResp = survey.objects.annotate(max_resp=Max('responseRele
def program_detail_view(request, primary_key):
survey = Survey.objects.get(pk=primary_key)
maxResp = survey.objects.annotate(max_resp=Max('responseRelevance'))
context = {'survey' : survey, 'maxResp': maxResp}
return render(request, 'relevance/programStats.html', context=context)
models.py
class Survey(models.Model):
...
class Choice(models.Model):
survey = models.ForeignKey(Survey, on_delete=models.CASCADE)
creationDate = models.DateTimeField(auto_now_add=True)
pce = models.IntegerField(
validators=[MaxValueValidator(4),
MinValueValidator(1)], choices=radioChoices,
)
interest = models.IntegerField(
validators=[MaxValueValidator(4),
MinValueValidator(1)], choices=radioChoices,
)
responseRelevance = models.IntegerField(blank=True)
template.html
<li>Overall Relevance Score: {{ maxResp }}</li>
总体相关性得分:{{maxrep}
我希望视图将从选项集中输出最大响应,但无论我如何调用它,模板中都不会显示任何内容。我对average和其他annotate/aggregate函数也尝试过同样的方法。您可以对给定的测量对象进行聚合,也可以对在第一次查询中检索的测量对象进行注释。后者只产生一个数据库查询,因此可能更高效
因此,我们可以.annotation(..)
我们的调查
对象查询,作为annotation,我们使用Max('choice\uu responseRelevance')
,因为我们希望在所有相关选择中获得最大responseRelevance
:
def程序详细信息视图(请求,主键):
测量=测量.objects.annotate(
max\u resp=max('choice\u responseRelevance')
).get(主键=主键)
上下文={'survey':survey}
返回呈现(请求'relevance/programStats.html',context=context)
现在,我们可以使用以下命令渲染此带注释的值:
<li>Overall Relevance Score: {{ survey.max_resp }}</li>
总体相关性得分:{{survey.max_resp}
忘了添加是的,我正在使用{%block content%}
和{%endblock%}
以及类似于{survey.choice\u set.all.count}
的内容在模板中呈现良好。对于单个调查,这应该是.aggregate(…)
和聚合(..)
将返回所有聚合的字典,因此这里字典将包含一项:'max_resp'
。这非常有意义!尽管出于某种原因,它仍然不希望在开发服务器的页面上呈现。其中{survey.max_resp}
应该显示一个数字,它是空的。@holmesian17:是否有任何相关的选择
s?因为如果没有,那么结果是无
。看起来有5个相关的选择
s,当我添加{survey.Choice\u set.all.count}
(顺便说一句,谢谢你的帮助——这让我毛骨悚然。)@霍尔姆斯17:选择的响应relevance
不是NULL
?你设置这些blank=True
有什么特别的原因吗?它们不是NULL。我开始意识到我没有考虑一些可能相关的事情。我把它设置为blank=True
,因为在响应下面当表单由另外两个数字提交时,将计算相关性。def calculate(self):responseRelevance=((self.pce*self.pce)*self.interest)返回responseRelevance
,然后将其保存到responseRelevance
<li>Overall Relevance Score: {{ survey.max_resp }}</li>