如何在Django模板中格式化查询集

时间:2020-02-08 11:15:09

标签: django django-models django-templates

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

Models.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}]>}

如何格式化这些值?

1 个答案:

答案 0 :(得分:0)

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

从文档中

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

模板示例:

{% load humanize %}

{{ total_payment|intcomma }}

并且,根据您想要格式化月份的方式,人性化具有“ naturalday”和“ naturaltime”模板标签。 但是,您也可以使用“日期”过滤器: https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#date

示例:

{{ month|date:"M" }}