Почему моя форма 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 в шаблоне
  • Пользовательская модель django и поле пользовательского первичного ключа
  • Не удалось выполнить проверку CSRF. Запрос прерван
  • Как разрешить пользователям изменять свои собственные пароли в Django?
  • Множество индексов Haystack - индексируется одинаково, даже существуют разные search_indexes
  • Django Rest Framework - не удалось разрешить URL для гиперссылок, используя имя представления "user-detail"
  • Формат даты Django GROUP BY strftime
  • Python - лучший язык программирования в мире.