【问题标题】:How to format the queryset in Django Template如何在 Django 模板中格式化查询集
【发布时间】:2020-05-24 08:15:25
【问题描述】:

我想以表格或查询集值的可读形式显示月份和总付款。

模型.py

class Payment(models.Model):
  statementperiod = models.DateField(default = date.today())
  paymentdate = models.DateField(default = date.today())
  paymentamount = models.IntegerField()
  paymentmethod = models.CharField(max_length=100 )
  Status = models.CharField(max_length = 250, default = 'paid', choices = PAYMENT_CHOICES)
  Paynote = models.CharField(max_length = 250, null = True, blank = True)

  @classmethod
  def totalpayment(cls):
        total = Payment.objects.annotate(month=TruncMonth('paymentdate')).values('month').annotate(total_payment=Sum('paymentamount'))
        return { total}

模板中的QuerySet值:

{<QuerySet [{'month': datetime.date(2019, 11, 1), 'total_payment': 315}, {'month': datetime.date(2019, 12, 1), 'total_payment': 8348}, {'month': datetime.date(2020, 1, 1), 'total_payment': 6292}]>}

如何格式化这些值?

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    您可以使用humanize django 应用程序中的“intcomma”模板标签来格式化total_payment: https://docs.djangoproject.com/en/3.0/ref/contrib/humanize/

    来自文档:

    要激活这些过滤器,请将“django.contrib.humanize”添加到您的 INSTALLED_APPS 设置中。完成后,在模板中使用 {% load humanize %},您将可以访问以下过滤器。

    模板示例:

    {% load humanize %}
    
    {{ total_payment|intcomma }}
    

    而且,根据您希望如何格式化月份,humanize 具有“naturalday”和“naturaltime”模板标签。 但是,您也可以使用“日期”过滤器: https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#date

    例子:

    {{ month|date:"M" }}
    

    【讨论】:

    • 当我使用 intcomma 时,查询集的值没有任何变化。
    • 我更新了答案。您是否在 INSTALLED_APPS 中添加了人性化应用程序?此外,您需要将其加载到模板中。如果它不起作用,请在您使用它的模板中显示一个 sn-p 代码。
    • 我已在 INSTALLED_APPS 中添加。但是,我将变量“total”返回给模板。当我返回“total_payment”变量时,我收到错误“total_payment”未定义。你能解决这个错误吗?
    • 你得到什么错误?你能告诉我你的模板代码和/或你的观点吗?
    • 模板代码"{% load humanize %} {{total_payment|intcomma}} models.py @classmethod def totalpayment(cls): total = Payment.objects.annotate(month=TruncMonth('paymentdate' )).values('month').annotate(total_payment=Sum('paymentamount')) return { total_payment}
    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 2022-12-17
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多