django - 表单中的 clean() 方法不起作用(将其加载到 ListView 中)
问题描述
我试过四处搜索并阅读文档,但我不太明白在处理 ListView、get_querysets() 和 get 方法时如何让 clean() 方法工作。
我尝试在 clean() 方法中添加一个断点(),但它没有被触发,这意味着它根本没有被调用。
我的怀疑是因为我没有使用 post 作为表单中的方法,但我需要使用 get 来为查询集构建过滤查询(即,它是使用 from 和 to 的日期选择器)。
这是我的设置(省略细节):
形式:
class ReportForm(forms.Form):
...
def clean(self):
super().clean()
...
return self.cleaned_data
列表显示:
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>
有谁知道为什么我的 clean 方法没有被调用?
解决方案
原来我设置表单变量的方式get_context_data()
是错误的。
(我没有将数据绑定到表单)
这解决了我的问题:
form = ReportForm(self.request.GET)
推荐阅读
- python - 如何在 Python 中将模块作为脚本执行
- typo3 - TYPO3 9.5 中的 enablecolumns 和 QueryBuilder
- python - 从 docx 文件创建直方图
- ios - 如何使用 OpenVPNAdapter 连接用户
- javascript - TypeError : onSubmit 不是函数
- jenkins - 詹金斯工作 - 在管道部分下找不到选项
- c - 用 C 中的结构重载
- java - 无法连接到本地 DynamoDB
- javascript - 如何使用 window.print() 作为图像在 div 标签内打印数据
- c++ - 行尾的 C++ 光标