Объекты Django.filter (дата …) — реализация шаблона

#django #django-filter #django-template-filters

#django #django-filter #django-template-filters

Вопрос:

У меня есть функция, которая отправляет электронное письмо с указанием расходов. Все работает нормально, но я понятия не имею, как внедрить небольшую часть кода в шаблон и предоставить пользователю возможность выбирать период времени. Например: пользователь должен выбрать год и месяц из шаблона.

 def mail_from_web(request):
email = EmailMessage('Your expenses', 'Hello there. Some text', 'email@from',
                     ['email@to'])
attachment_csv_file = StringIO()
writer = csv.writer(attachment_csv_file, delimiter=',')
writer.writerow(['Date', 'Customer', 'Car park'])
for call in Call.objects.filter(date__year='2019', date__month='04').order_by('date'):
    writer.writerow([call.date_start.strftime("%Y-%m-%d"), call.customer, call.expenses])
email.attach('expenses.csv', attachment_csv_file.getvalue(), 'text/csv')
email.send(fail_silently=False)
return render(request, 'calls/mail_sent.html')
  

Вместо этого:
объекты.фильтр(дата__год=’2019′, дата__месяц=’04’)

Ответ №1:

создайте форму

 class MyForm(forms.Form)
    year = forms.IntegerField(
        widget = forms.NumberInput(min=2019)
        )
    month = forms.IntegerField(
       widget = forms.NumberInput(min=1, max=12))
  

Добавьте его в свой контекст, чтобы перейти к шаблону.

Показать в шаблоне… {{форма}} …

В представлении

 year = int(request.POST['year'])
month = int(request.POST['month'])
  

Изменить Call.objects.filter(date__year='2019', date__month='04') на Call.objects.filter(date__year=year, date__month=month)

Я только что понял, что вы не используете int для года и месяца, поэтому вам нужно будет соответствующим образом изменить.

Комментарии:

1. Это было полезно. Большое спасибо.