【问题标题】:Django objects.filter(date...) - template implementationDjango objects.filter(date...) - 模板实现
【发布时间】:2019-09-11 19:48:26
【问题描述】:

我有一个发送包含费用的电子邮件的功能。一切正常,但我不知道如何将一小部分代码实现到模板中,并为用户提供选择时间段的选项。 例如:用户应该从模板中选择年份和月份。

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')

【问题讨论】:

    标签: django django-filter django-template-filters


    【解决方案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 作为年份和月份,因此您需要进行相应的修改。

    【讨论】:

    • 这很有帮助。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2021-05-15
    • 2011-07-29
    • 2022-11-18
    • 2017-08-13
    • 2012-11-29
    • 2018-03-01
    • 1970-01-01
    相关资源
    最近更新 更多