Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django如何在表单中添加MinLengthValidator验证程序_Django_Django Forms_Django Validation - Fatal编程技术网

django如何在表单中添加MinLengthValidator验证程序

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_

我有一个搜索表单,我想验证输入的“搜索词”至少有4个字母。我在尝试验证表单时遇到此错误

必须先呈现响应内容,然后才能对其进行迭代。

#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“格式为无效