在需要之前阻止CreateView中的表单验证

时间:2015-01-07 17:41:54

标签: python django forms django-class-based-views class-based-views

我想使用CreateView创建用户并在链接到User模型的Profile中设置一些其他值。 那些价值是前。城市。此城市值来自另一个模型(城市)ForeignKeyed到区域模型ForeignKeyed到国家/ 模型..等等。

因此,要选择正确的城市,用户必须首先选择正确的国家和地区。 我的解决方案是:在视图的开头只有国家组合框选择器:当用户选择国家时,我通过javascript提交表单并添加区域组合框选择器。然后,当用户设置区域组合框时,我将添加城市 ...

我决定提交表单,因为每次用户使用GET和url参数更改某些组合框时,我都不想丢失页面中的其他值。但是,在用户单击“提交”按钮之前,我不想验证或显示任何错误。

所以我有这个

$('#id_of_the_countries_combobox').change(
   function () {
      $('#id_nocommit').prop('checked', true);
      $('#mainform').submit();
});

我想检查我的视图是否存在 nocommit 并且只是跳过验证:

class CandidatiCreate(CreateView):
    def post(self, request, *args, **kwargs):
        post = request.POST.copy()
        if 'nocommit' in post:
            self.object = None
            form_class = self.get_form_class()
            form = self.get_form(form_class)
            ♯at this point form is already validated and full of errors
            return self.render_to_response(
                self.get_context_data(form=form))

        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

问题:表单始终经过验证,视图显示错误。

我该如何避免?或者:这是正确的方法吗?

0 个答案:

没有答案