Почему моя форма Django не вызывает ошибок?

У меня простая форма, и всякий раз, когда пользователь делает что-то неправильно в форме, я хотел бы поднять ошибку проверки на Django. Проблема в том, что я его настраивал, но когда форма отправляется с неправильными значениями, она проходит. Мне было интересно, почему это происходит и как я могу избежать этого?

Вот html-форма:

<form id="ask-project" method="post" action="{% url 'ask-project' %}"> {% csrf_token %} <input required="required" class="form-control form-text required" id="prenom" name="prenom" type="text"> <button class="btn btn-default submit">Submit</button> </form> 

views.py:

 def askProject(request): if request.method == 'POST': form = AskProjectForm(request.POST) if form.is_valid(): save_it = form.save(commit=False) save_it.save() return redirect('/merci/') #success 

forms.py:

 class AskProjectForm(forms.ModelForm): class Meta: model = AskProject fields = ['prenom'] def clean_prenom(self): prenom = self.cleaned_data['prenom'] if len(prenom) < 3: raise ValidationError('Votre prénom doit etre plus long que 1 caractère.') return prenom 

Я делаю что-то неправильно ?

One Solution collect form web for “Почему моя форма Django не вызывает ошибок?”

С образцом, который вы используете, такая проблема неизбежна и упорядоченна в день. Во-первых, это не визуализация формы вручную, как вы, кажется, делаете. Это означает, что вы не показываете обратную связь, когда пользователь вводит неверные данные. Рассмотрите возможность использования {{ form }} , {{ form.as_table }} т. Д. Или {{ form.as_table }} поля со всей информацией, как описано здесь: https://docs.djangoproject.com/en/1.11/topics/forms/#rendering-fields- вручную

Вторая проблема заключается в том, что вы перенаправляете, когда форма отправляется, независимо от того, действительна она или нет. Рекомендуемый шаблон – перенаправление только в том случае, если форма действительна. Поэтому, даже если вы применяете предложение в первом параграфе, вы все равно не получаете требуемую обратную связь. Рассмотрите возможность применения формы, как указано в руководстве. Далее следует прямая копия

 if request.method == 'POST': # create a form instance and populate it with data from the request: form = NameForm(request.POST) # check whether it's valid: if form.is_valid(): # process the data in form.cleaned_data as required # ... # redirect to a new URL: return HttpResponseRedirect('/thanks/') # if a GET (or any other method) we'll create a blank form else: form = NameForm() return render(request, 'name.html', {'form': form}) 

Наконец, перейдя к конкретному случаю, почему валидация вашей формы не работает, добавьте инструкцию print в свой чистый метод, чтобы распечатать и строку, и ее длину, если она подсчитывается (или если ваш метод даже вызван)

  • «Введите действительную дату» Ошибка в Django Forms DateField
  • jquery ajax post list добавляет '' к запросуdict в django
  • Самый быстрый способ обновить кучу записей в наборе запросов в Django
  • Показать профиль pic из модели в шаблоне в django
  • скрининг djangoitem с иностранным ключом
  • Django DateField без года
  • Как изменить django QueryDict на Python Dict?
  • Почему «Модели еще не загружены»?
  •  
    Interesting Posts for Van-Lav

    Устанавливает ли OS X пакеты с установкой пакетов, которые я поддерживаю с помощью pip?

    Где параметр по умолчанию в функции Python

    Как программно выбрать панорамирование / масштабирование в навигации pyqt / matplotlib

    psycopg2 отключается от сервера

    Как я могу заставить ipdb отображать больше строк контекста во время отладки?

    Как отношения django one-to-one сопоставляют имя дочернему объекту?

    Как правильно запустить localtunnel v2

    Почему PyPy не был включен в стандартный Python?

    Настроить (переопределить) метод отправки Flask-Admin из вида редактирования

    Почему результат re2 отличается от re-модуля в Python?

    Django LiveServerTestCase: Пользователь, созданный в методе setUpClass, недоступен в test_method?

    Параметры для создания веб-приложения на основе python

    Недопустимый синтаксис с использованием регулярного выражения в python 3.4

    NLTK – частота подсчета Bigram

    Django Удалить все, кроме последних пяти запросов

    Python - лучший язык программирования в мире.