У меня есть приложение django, и на одной странице у меня есть несколько форм для разных моделей. Я хотел бы получить сообщение об успехе, которое легко сделать, просто добавив в контекст после отправки / проверки формы. Тем не менее, это оставляет возможность повторной отправки формы, которая просто выдаст ошибку на страницу, но это все равно раздражает.
URLs:
url_patterns = [
re_path(r'^manager/$', Manager.as_view(), name='manager'),
.......more.....
]
views.py:
class Manager(LoginRequiredMixin, View):
template_name = 'results/manager_templates/manager.html'
form1 = Form1
form2 = Form2
login_url = '/'
redirect_field_name = 'redirect_to'
def get(self, request, *args, **kwargs):
form1 = self.form1()
form2 = self.form2()
context = {
'form1': form1,
'form2': form,}
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs):
submit_clicked = request.POST.get('submit')
form1 = self.form1()
form2 = self.form2()
context = {}
if submit_clicked == 'Form 1':
form1 = self.form1(request.POST)
if form1.is_valid():
form1.save()
context['message'] = 'Form 1 successful'
# reset the form
form1 = self.form1()
# return HttpResponseRedirect(
# reverse('results:manager',
# ))
else:
print('NOT VALID')
elif submit_clicked == 'Form 2':
... do same stuff as above ...
context['form1'] = form1
context['form2'] = form2
return render(request, self.template_name, context)
Если бы я раскомментировал HttpResponseRedirect, после того, как форма была проверена и добавлена следующим образом:
return HttpResponseRedirect(
reverse('results:manager',
))
Затем он возвращает меня на мою страницу, и, если я обновлю форму, она не будет повторно отправлена. Однако я не могу передать этот аргумент без прохождения через URL:
т.е. если бы я написал:
return HttpResponseRedirect(
reverse('results:manager',
kwargs={'success':'success'}
))
Я получаю ошибку:
Reverse for 'manager' with keyword arguments '{'success': 'success'}' not found. 1 pattern(s) tried: ['manager/$']
и если я изменю urls.py на:
url_patterns = [
re_path(r'^manager/$', Manager.as_view(), name='manager'),
re_path(r'^manager/(?P<success>)$', Manager.as_view(), name='manager'),
]
Я получаю ошибку:
Reverse for 'manager' with keyword arguments '{'success': 'success'}' not found. 2 pattern(s) tried: ['manager/(?P<success>)$', 'manager/$']
Есть ли способ передать переменные HttpResponseRedirect, которые не нужно добавлять в регулярное выражение url? Или есть какой-либо другой способ «сбросить» мой запрос. POST, чтобы формы не отправлялись повторно без использования HttpResponseRedirect?