Django — ранее страница с данными, введенными, когда форма недействительна

#django #view #django-forms #django-views

#django #Вид #django-forms #django-просмотры

Вопрос:

Могу ли я вернуть свою страницу с информацией, введенной ранее, когда форма недействительна?

Views.py

 def MyView(request):
   [...code...]
   if request.method == 'POST':
      form = MyForm(request.POST or None)
      if form.is_valid()
         //do something and redirect to success page
      else:
         //back to the page with the information filled in by the user (HERE IS MY PROBLEM)

  

Ответ №1:

строка form = MyForm(request.POST or None) создает вызываемый MyForm объект form с присвоенными ему данными запроса — это похоже на заполненную форму. is_valid() Метод проверяет наличие ошибок в вашей форме и добавляет конкретные ошибки в вашу form , так что теперь это заполненная форма с присвоенными ошибками. Если вы хотите вернуть эту форму пользователю, вы должны добавить ее в контекст, поэтому, учитывая ее стандартное представление на основе функций django, оно должно выглядеть следующим образом:

 def MyView(request):
   [...code...]
   if request.method == 'POST':
      form = MyForm(request.POST or None)
      if form.is_valid()
         form.save()
         return render(request, 'succes_page_template.html')
      else:
         return render(request, 'current_template.html', context = {'form': form}) 
  

если form недопустимо, следующее, что видит пользователь, — это та же страница, на которой он заполнил форму (‘current_template.html ‘) но поскольку все поля заполнены данными, которые он / она уже ввел, также форма будет иметь ошибки, присвоенные определенным полям, чтобы вы могли их распечатать. Если вы новичок в Django, я предлагаю с самого начала перейти к представлениям на основе классов — они выполняют тяжелую работу за вас, и рефакторинг отладка становится намного проще. вот ссылка, приветствую!