我正在尝试数学/查找最大/平均等。在我的视图中,然后将其呈现在模板中,但是我似乎无法弄清楚如何使它完成所有工作。计算需要在相关对象上进行,我觉得我已经尝试了一切。尽我的智慧。
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>
我希望视图将输出来自选择集的最大响应,但是无论我如何调用它,模板中都不会显示任何内容。对于平均和其他注释/汇总函数,我已经尝试过相同的方法。
答案 0 :(得分:1)
您可以聚集到给定的Survey
对象上,或者注释您要在第一个查询中检索的调查对象。后者仅导致单个数据库查询,因此效率可能更高。
因此,我们可以.annotate(..)
Survey
个对象查询,并且作为注释,我们使用Max('choice__responseRelevance')
,因为我们想在所有与相关的事件中获得最大的responseRelevance
选择:
def program_detail_view(request, primary_key):
survey = Survey.objects.annotate(
max_resp=Max('choice__responseRelevance')
).get(pk=primary_key)
context = {'survey' : survey}
return render(request, 'relevance/programStats.html', context=context)
现在我们可以使用以下方式渲染此带注释的值:
<li>Overall Relevance Score: {{ survey.max_resp }}</li>