Запретить проверку формы в CreateView, пока не потребуется

Я хочу использовать CreateView для создания пользователей и установки некоторых дополнительных значений в профиле, связанных с моделью пользователя. Эти значения ex. город. Это значение города происходит от другой модели (City) ForeignKeyed для модели Region. ForeignKeyed для модели Country... и так далее.

Таким образом, чтобы выбрать правильный город, пользователь должен сначала выбрать правильную страну и правильный регион. Мое решение таково: в начале представления есть только селектор комбинированного списка " Страна": когда пользователь выбирает страну, я отправляю форму через javascript и добавляю селектор комбинированного списка " Регион". Затем, когда пользователь установит поле со списком Region, я добавлю город...

Я решил отправить форму, потому что я не хочу терять другие значения на странице каждый раз, когда пользователь изменяет какой-либо комбинированный список, используя 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 ответов

Другие вопросы по тегам