【问题标题】:Django View Aggregate Not Doing CalculationDjango查看聚合不做计算
【发布时间】:2021-06-25 19:48:48
【问题描述】:

我正在尝试在我的视图中为 HTML 显示做一些除法运算。出于某种原因,我没有得到下面视图的计算。我对这一切都很陌生,所以任何建议都将不胜感激。 查看

from django.db.models.functions import Cast
from django.db.models import FloatField, F

class PatientListView(LoginRequiredMixin, ListView, Cast, FloatField):
    model = Patient
    template_name = 'patient_list.html'
    ind_treat_length = Patient.objects.annotate(treat_len=( F('cycle_length_days') / F('treatments_per_cycle')))

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(
            author=self.request.user
        )

ind_treat_length 注释是我为此提出的。我的 HTML 模板请求是

{{ patient.treat_len }}

我错过了什么吗?

谢谢

【问题讨论】:

  • 我相信模板变量被称为patient_list(因为它不仅仅是一个病人,它是他们的列表)。
  • 从我的阅读中我想我明白如果我在注释行中这样做 - Patient.objects.annotate(treat_len=( 然后我会在我的 html 文件中调用 {{ patient.treat_len }} 。我很可能会感到困惑。

标签: python django


【解决方案1】:

尝试为您的患者列表设置一个“context_object_name”。我不知道在最近的 Django 版本中是否仍然如此,但过去查询结果带有一个可以在模板中访问的通用名称(如“object”或“object_list”)。 'context_object_name' 允许您覆盖它。

有关更多信息,请参阅此处对 context_object_name 的讨论:https://docs.djangoproject.com/en/3.2/topics/class-based-views/generic-display/

【讨论】:

【解决方案2】:

在进一步阅读和研究之后,我认为使用 Django 进行计算的首选方法是 Views.py 文件之外的任何地方。我使用以下方法将计算移至 models.py 文件:

def treat_len(self):
    return self.cycle_length_days / self.treatments_per_cycle

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 2019-08-05
    • 2019-11-18
    • 1970-01-01
    • 2023-03-19
    • 2011-11-27
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多