Как отформатировать набор запросов в шаблоне Django - PullRequest
0 голосов
/ 08 февраля 2020

Я хочу отобразить месяц и итоговую оплату в табличном или читаемом виде из значения набора запросов.

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 голосов
/ 08 февраля 2020

Вы можете использовать тег шаблона "intcomma" из приложения humanize django для форматирования итоговой оплаты: 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" }}
...