Как изменить аннотированный месяц int в словаре на название месяца? - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в Django framework, я использовал аннотацию для суммирования всех сумм, выплаченных за определенный c месяц в году. Это работает нормально, но проблема в том, что я не могу преобразовать месяц int в имя месяца в шаблоне

views.py

def income_report(request):
    context = {}
    if grab_data_passed == 'monthly':
       daily_data=Income.objects.values('date__year', 'date__month')\
       .annotate(amount=Sum('amount'))
       context['daily_data']=daily_data
       return render(request, 'reports/incomes_report_details.html', context)

template

  {% for fo in daily_data %}
         <tr>
           <td>{{ fo.month }}</td>
            <td>{{ fo.amount }}</td>
         </tr>
{% endfor %}

Как поменять этот аннотированный месяц на название месяца в шаблонах. Я знаю, что должен сначала преобразовать date__month обратно в название месяца в представлениях, прежде чем передать его шаблонам, но как?

1 Ответ

1 голос
/ 03 марта 2020

Вы можете создать свои собственные фильтры шаблонов, как это в вашем случае:

Из django официальной документации:

https://docs.djangoproject.com/en/3.0/howto/custom-template-tags/

polls/
    __init__.py
    models.py
    templatetags/
        __init__.py
        extra_filters.py
    views.py

extra_filters.py:

from django import template
import calendar

register = template.Library()


...


@register.filter
def month_to_string(month):
    return calendar.month_name[month]

и затем в вашем шаблоне сначала импортируйте extra_filters.py:

{% load extra_filters %}
...
...



{{ fo.month|month_to_string }}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...