Django 表单中的clean()方法不工作(将其加载到ListView)
我已经尝试过搜索和阅读文档,但我不太明白在处理ListView的get_querysets()和get方法时如何使用clean()方法 我尝试在clean()方法中添加断点(),但它没有被触发,这意味着它根本没有被调用 我的怀疑是因为我没有使用post作为表单中的方法,但我需要使用get来构建对查询集的筛选查询(即,它是使用from和to的日期选择器) 这是我的设置(省略详细信息): 表格: 列表视图:Django 表单中的clean()方法不工作(将其加载到ListView),django,listview,django-views,django-forms,django-queryset,Django,Listview,Django Views,Django Forms,Django Queryset,我已经尝试过搜索和阅读文档,但我不太明白在处理ListView的get_querysets()和get方法时如何使用clean()方法 我尝试在clean()方法中添加断点(),但它没有被触发,这意味着它根本没有被调用 我的怀疑是因为我没有使用post作为表单中的方法,但我需要使用get来构建对查询集的筛选查询(即,它是使用from和to的日期选择器) 这是我的设置(省略详细信息): 表格: 列表视图: class ReportView(ListView): form_class = R
class ReportView(ListView):
form_class = ReportForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
form = kwargs.get('form', self.form_class())
context['form'] = form
return context
def get_queryset(self):
# Details omitted but I'm essentially taking data from the form
# and using it to filter a QuerySet
from_date = self.request.GET.get('from_date')
to_date = self.request.GET.get('to_date')
.......
return QuerySet
模板:
<form action="" method="get">
{% csrf_token %}
{% crispy form %}
</form>
{%csrf_令牌%}
{%crispy form%}
有人知道为什么没有调用我的clean方法吗?结果表明,我在
get\u context\u data()
中设置表单变量的方式是错误的
(我没有将数据绑定到表单)
这解决了我的问题:
form = ReportForm(self.request.GET)
为什么ListView实现会在任何与表单相关的事情上调用clean来清理表单,请查看文档|它最终只是我在发出get请求时捕获表单的方式,我在本文中给出了答案。谢谢你的评论!
form = ReportForm(self.request.GET)