Django objects.filter(date...) - 模板实现
Django objects.filter(date...) - template implementation
我有一个发送带有费用的电子邮件的功能。一切正常,但我不知道如何将一小部分代码实现到模板中并为用户提供选择时间段的选项。
例如:用户应从模板中选择年份和月份。
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')
而不是这个:
objects.filter(date__year='2019', date__month='04')
创建表单
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 表示年份和月份,因此您需要相应地进行修改。
我有一个发送带有费用的电子邮件的功能。一切正常,但我不知道如何将一小部分代码实现到模板中并为用户提供选择时间段的选项。 例如:用户应从模板中选择年份和月份。
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')
而不是这个: objects.filter(date__year='2019', date__month='04')
创建表单
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 表示年份和月份,因此您需要相应地进行修改。