django如何在表单中添加MinLengthValidator验证程序
我有一个搜索表单,我想验证输入的“搜索词”至少有4个字母。我在尝试验证表单时遇到此错误 必须先呈现响应内容,然后才能对其进行迭代。django如何在表单中添加MinLengthValidator验证程序,django,django-forms,django-validation,Django,Django Forms,Django Validation,我有一个搜索表单,我想验证输入的“搜索词”至少有4个字母。我在尝试验证表单时遇到此错误 必须先呈现响应内容,然后才能对其进行迭代。 #views.py class SearchFormView(FormView): form_class = PostSearchForm template_name = 'lineup/post_search.html' def form_valid(self, form): schWord = form.cleaned_
#views.py
class SearchFormView(FormView):
form_class = PostSearchForm
template_name = 'lineup/post_search.html'
def form_valid(self, form):
schWord = form.cleaned_data['search_word']
search_type = form.cleaned_data['search_type']
context = {}
if search_type == 'store':
post_list = Store.objects.filter(
Q(cie_name__icontains=schWord)).distinct()
context['object_type'] = 'store'
context['object_list'] = post_list
if search_type == 'city':
post_list = Address.objects.filter(
Q(city__icontains=schWord)).distinct()
context['object_type'] = 'city'
context['object_list'] = post_list
context['form'] = form
context['search_term'] = schWord
return render(self.request, self.template_name, context)
def form_invalid(self, form):
schWord = form.cleaned_data['search_word']
messages.add_message(
self.request, messages.WARNING, _('Please correct this...'))
context = super(SearchFormView, self).form_invalid(form)
return render(self.request, self.template_name, context)
forms.py的内容
#forms.py
class PostSearchForm(forms.Form):
SEARCH_TYPE_CHOICES = (
('city', 'city'),
('store', 'store'),
('product', 'product'),
)
search_type = forms.ChoiceField(choices=SEARCH_TYPE_CHOICES, required=True)
search_word = forms.CharField(label='Search Word',
validators=[MinLengthValidator(4)], required=True)
'''
def clean_search_word(self):
cd = self.cleaned_data
if len(cd['search_word']) < 4:
raise forms.ValidationError('too short.')
return cd['search_word']
'''
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Fieldset(
'',
Field('search_type', css_class='span6'),
Field('search_word', css_class='span6'),
),
FormActions(
Submit('submit', 'Go', css_class='btn btn-primary')
)
)
super(PostSearchForm, self).__init__(*args, **kwargs)
回溯显示问题出在
表单\u无效的方法中。您正在将超类调用的结果捕获为上下文
,并将其传递到渲染函数中。但是超类方法返回一个响应,而不是上下文-它已经为您呈现了模板,您只需要返回它
def form_invalid(self, form):
schWord = form.cleaned_data['search_word']
messages.add_message(
self.request, messages.WARNING, _('Please correct this...'))
return super(SearchFormView, self).form_invalid(form)
回溯显示问题出在表单\u无效的方法中。您正在将超类调用的结果捕获为上下文
,并将其传递到渲染函数中。但是超类方法返回一个响应,而不是上下文-它已经为您呈现了模板,您只需要返回它
def form_invalid(self, form):
schWord = form.cleaned_data['search_word']
messages.add_message(
self.request, messages.WARNING, _('Please correct this...'))
return super(SearchFormView, self).form_invalid(form)
请显示完整的回溯。我添加了回溯。请显示完整的回溯。我添加了回溯。我必须删除'schWord=form.cleaned_data['search_word']',它也给了我一个错误键。此函数中的/search/错误..../lineup/views.py“在form_invalidI中我必须删除'schWord=form.cleaned_data['search_word']'它也给了我一个错误键此函数中的/search/处有一个错误..../lineup/views.py“格式为无效