Декоратор
@login_required
автоматически добавляет параметр next
GET в LOGIN_URL, так что пользователь перенаправляется обратно на ту же страницу, с которой был запущен вход. Прямо сейчас вы запускаете его из представления answer
, поэтому пользователь вернется прямо к представлению ответа. POST-данные теряются всякий раз, когда происходит перенаправление, поэтому вы не можете получить данные, кроме как временно сохранить их в файлах cookie или перенаправить пользователя на страницу вопросов после входа в систему.
Реализация 1
POST Данные не сохраняются, но пользователь перенаправляется в QuestionView
from django.shortcuts import redirect, reverse
...
...
def answer(request, question_id):
if not request.user.is_authenticated:
return redirect("%s?next=%s" % (settings.LOGIN_URL, reverse('question-view-name'))
...
...
Реализация 2
Данные POST сохраняются в сеансе и затем извлекаются после входа в систему. Я не пробовал, и вам нужно было сериализовать данные POST в строку. Кроме того, требуется django.contrib.sessions
в INSTALLED_APPS
и django.contrib.sessions.middleware.SessionMiddleware
в вашем MIDDLEWARE
. Оформить заказ https://data-flair.training/blogs/django-sessions/, чтобы узнать, как устанавливать, создавать и удалять переменные сеанса.
from django.shortcuts import redirect, reverse
...
...
def answer(request, question_id):
if not request.user.is_authenticated:
request.session['form_data'] = YourSerializerFunctionToSerializeFormData(request.POST)
# must retuern a string, use json.dumps() to convert a dictionary to string
return redirect("%s?next=%s" % (settings.LOGIN_URL, reverse('answer-view-name', args=[question_id]))
data = None
if request.method == 'GET':
if 'form_data' in request.session:
data = request.session['form_data']
del request.session['form_data'] # Delete the key once done
else:
data = request.POST
...
form = AnswerForm(data) if data else AnswerForm()
...
...
Надеюсь, это поможет.