我正在尝试清理FORMVIEW,但收效甚微。 我有以下表格:
形式。。。
class BookRequestNumberSearch(forms.Form):
q = forms.IntegerField(required=True)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
q = kwargs.pop('q', None)
super(BookRequestNumberSearch, self).__init__(*args, **kwargs)
self.fields['q'].widget.attrs['class'] = 'name2'
def clean(self):
cleaned_data = super(BookRequestNumberSearch, self).clean()
request_number = cleaned_data.get('q')#
if request_number:
if Book.objects.filter(request_number__iexact=request_number).exists():
try:
Book.objects.get(request_number__iexact=request_number)
self.add_error('request_number',' Error.')
except Book.DoesNotExist:
pass
return cleaned_data
还有风景....
class BookRequestNumberSearchView(LoginRequiredMixin,FormView):
form_class = BookRequestNumberSearch
template_name = 'Book/book_request_number_search.html'
def get_form_kwargs(self):
kwargs = super(BookRequestNumberSearchView, self).get_form_kwargs()
kwargs['user'] = self.request.user
kwargs['q'] = self.request.GET.get("q")
return kwargs
def get_initial(self):
init = super(BookRequestNumberSearchView, self).get_initial()
init.update({'q':self.request.GET.get("q")})
return init
和 HTML
<form method="GET" autocomplete=off action="{% url 'Book:procedure_request_number_search_detail' %}" >
<div>
<h1 class="title">Book Request Number Search</h1>
</div>
<div class="section">
{{ form.q }}
</div>
这段代码有效,但我无法弄清楚如何让 Django 调用 CLEAN。 我怀疑也许是因为我正在做一个 GET the CLEAN 没有得到认可? 我花了大部分时间玩变化,但无论我做什么,CLEAN都被忽略了。 感谢您的任何想法。
的工作方式是,一旦有效数据被 POST 后,它就会调用 FormView 的 form_valid()
方法。因此,您可以将form_valid方法添加到BookRequestNumberSearchView中,您可以在其中访问表单的清理数据,如下所示:
class BookRequestNumberSearchView(LoginRequiredMixin,FormView):
form_class = BookRequestNumberSearch
template_name = 'Book/book_request_number_search.html'
def form_valid(self, form):
print(form.cleaned_data)
return # should return an HttpResponse
请注意我如何通过执行form.cleaned_data
来访问清理的数据(根据此处的文档(。
根据您的代码,我怀疑您可能没有正确使用 clean(( 方法。clean方法应该简单地处理输入到表单中的数据,并将数据转换为"更干净"的状态。然后,您需要访问干净的数据,并根据form_valid部分中的数据进行查询。
祝你好运!
您可以在此处查看 FormView 文档。