如何重写UpdateView生成的表单的clean方法?

Mil*_*ano 1 python django django-views

是否可以覆盖clean method基于类的视图 - 生成的形式的a UpdateView

在中form,我将覆盖clean方法来检查是否填充了第一字段或第二字段。

形式如下:

class MyForm(forms.ModelForm):
    ...
    def clean(self):
        super(MyForm,self).clean()
        if bool(self.cleaned_data['first_field'])== bool(self.cleaned_data['first_field']):
            raise ValidationError("Please, fill the first or second field")
Run Code Online (Sandbox Code Playgroud)

视图:

class EditOrderView(UpdateView):
    model = Job
    fields = ['language_from', 'language_to', 'level', 'short_description', 'notes',
              'first_field', 'second_field']
    template_name = 'auth/jobs/update-order.html'

    def get_object(self, queryset=None):
        return get_object_or_404(self.model, pk=self.kwargs["pk"], customer=self.request.user)

    def get_success_url(self):
        return '/my-orders/'

    def form_valid(self, form):
        self.order = form.save()
        email.AdminNotifications.edited_order(self.order)
        return HttpResponseRedirect(self.get_success_url())
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 5

您可以通过设置使视图使用表单form_class

class EditOrderView(UpdateView):
    model = Job
    form_class = MyForm
    ...
Run Code Online (Sandbox Code Playgroud)