1

我在这样的 Django 表单中有 10 个字段

class SearchForm(forms.Form):
    student_number                 = forms.CharField(required=False)
    final_date                      = forms.DateField(required=False)
    location_area                   = forms.FloatField(required=False)

在我的form.is_valid()我想从验证中排除几个字段,比如

[location_area, final_date]其余都执行验证或只想验证charfieldsselect fields

我怎样才能做到这一点?

4

2 回答 2

2

Meta表单类中,您可以排除字段:

class SearchForm(forms.Form):
    # form fields here
    class Meta:
        exclude = ('location_area', 'final_date',)

如果您不想从表单中排除字段并且仍然不想验证它们,那么为表单编写一个自定义字段清理方法,它什么都不做:

class SearchForm(forms.Form):
    # form fields here

    def clean_location_area(self):
        location_area = self.cleaned_data['location_area']
        return location_area
于 2013-05-17T03:57:50.040 回答
0

基本上,您可以覆盖表单的init方法:例如

class SearchForm(forms.Form):
# form fields here

def __init__(self, post_data=None, post_files=None):
     if post_data and post_files:
         self.base_fields.remove(field_name)
         super(SearchForm, self).__init__(post_data, post_files)
     else:
         super(SearchForm, self).__init__()

因此,基本上,当您获得可以使用的表单时:SearchForm() 并且当您将数据发布到您可以使用的表单时:SearchForm(request.POST, request.FILES). 在__init__方法中,我们正在检查请求是 post 还是 get 使用post_dataand post_files。因此,如果它是发布的,我们将从中删除该字段,base_field以便它不会检查该字段的验证。

在 Django 1.11 中测试

于 2018-10-21T08:02:30.333 回答