In my app, I want the following behaviour:
- User goes to contact form url
- User fills up the contact form
- (a) If user is logged in, validate and submit the form
- (b) If user is not logged in, redirect to login form for logging in and then if users credentials are validated, submit the form.
In my views.py, I have:
@method_decorator(login_required, name='post')
class ContactView(FormView):
template_name = 'extras/contact.html'
form_class = ContactForm
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form, **kwargs)
else:
return self.form_invalid(form, **kwargs)
def form_valid(self, form):
instance = form.instance
instance.request_user = self.request.user
instance.save()
messages.success(self.request, "Thank you for contacting us! We will reach you soon.")
return super().form_valid(form)
def get_success_url(self):
return reverse('main_home')
The idea of including a post method was taken from this SO Answer
This does not work. The user is being redirected to login form, logged in, but displays a blank form and entered information before redirection is lost.
How can I resolve this problem, any hints?