Django 在相关对象上运行注释或聚合并在模板中渲染?

Django 在相关对象上运行注释或聚合并在模板中渲染?,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

我试图在我的视图中计算/找到最大值/平均值等,然后在模板中渲染它们,但我似乎不知道如何使其全部工作。需要对相关对象进行计算,我觉得我已经尝试了所有方法。我不知所措

views.py

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>