Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Python 如何在Django 1.7中为ModelForm创建验证?_Python_Django - Fatal编程技术网

Python 如何在Django 1.7中为ModelForm创建验证?

Python 如何在Django 1.7中为ModelForm创建验证?,python,django,Python,Django,我无法显示我的验证。首先,我想知道这些验证是否应该在models.py或forms.py中完成 通过研究,我发现可以使用经过清理的数据和验证逻辑创建验证。我还发现了一种称为验证器的东西,可以在模型中使用——也许还有模型表单 下面是我编写的一些代码,在视图中看不到验证。任何帮助都将不胜感激 class ServiceForm(forms.ModelForm): category= forms.ChoiceField(choices= CATEGORIES) service_desc

我无法显示我的验证。首先,我想知道这些验证是否应该在models.py或forms.py中完成

通过研究,我发现可以使用经过清理的数据和验证逻辑创建验证。我还发现了一种称为验证器的东西,可以在模型中使用——也许还有模型表单

下面是我编写的一些代码,在视图中看不到验证。任何帮助都将不胜感激

class ServiceForm(forms.ModelForm):
    category= forms.ChoiceField(choices= CATEGORIES)
    service_description= forms.CharField(widget=forms.Textarea)
    more_service_info= forms.CharField(widget=forms.Textarea)

    class Meta:
        model = Service
        fields = ('service_name', 'category', 'address', 'city', 'state', 'zipcode',
                'phone', 'website_link', 'service_description', 'more_service_info',
                'price', 'pub_date',)

    def clean_service_description(self):
        data = self.cleaned_data['service_description']
        if len(data) < 10:
            raise forms.ValidationError("Description should be greater than 10 characters")
            return data

正如您所提到的,有两种验证方法。验证器是django内置的东西,可以应用于模型中。另一种是验证法或清洁法,应以表格形式进行。对于您的情况,我更想知道您的clean_*方法是否被调用,而不是看到验证出现。谢谢您的输入。我怎么称呼清洁方法呢?这很简单。在视图中验证表单的有效性。我想你可以做你的表单。触发clean方法是否有效。是的,我可以。我可以发布我的视图代码。我没有得到任何验证如果您正在发送POST请求,这意味着将执行form.is\u valid,那么调用您的验证方法将毫无意义。我能想到的是,你可以尝试确保你的其他验证被调用。特别是,尝试添加clean方法,并在该方法中检查是否在已清理的数据中获得“service\u description”。
def create(request):
    if request.POST:
        form= ServiceForm(request.POST)
        if form.is_valid():
            service_obj = form.save(commit=False)
            service_obj.user_id = request.user.id
            service_obj.save()

            return render_to_response('services/service_created.html', 
                              {'service': Service.objects.get(id=service_obj.id)})
    else:
        form = ServiceForm()

    args= {}
    args.update(csrf(request))
    args['form'] = form

    return render_to_response('services/create_service.html', args )