Reputation: 1
"""Renders web pages for the reviews and reviews form.""" from django.shortcuts import render, redirect, get_object_or_404 from .models import * from django.views import View from .forms import * from django.views.generic import ListView, DetailView from django.http import HttpResponseRedirect, HttpResponse from django.core.mail import send_mail, BadHeaderError from django.contrib import messages
class ReviewsView(ListView, View):
template_name = "resort/testimonial.html"
model = Review
form = ReviewForm
def post(self, request, *args, **kwargs):
"""Renders the form and creates an instance."""
form = ReviewForm(request.POST)
if form.is_valid():
review = Review.clean_fields()
form.instance.name = request.name
form.instance.review = review
form.save_m2m()
return redirect('reviews')
def get_context_data(self, **kwargs):
"""load data into thecontext dictionary to be rendered on the page."""
context = super().get_context_data(**kwargs)
context.update({
'form': self.form,
})
return context
Upvotes: 0
Views: 62
Reputation: 36
The next line:
return redirect('reviews')
If you want to redirect in any case (with valid or invalid form), move the redirect outside of if form.is_valid():
def post(self, request, *args, **kwargs):
"""Renders the form and creates an instance."""
form = ReviewForm(request.POST)
if form.is_valid():
review = Review.clean_fields()
form.instance.name = request.name
form.instance.review = review
form.save_m2m()
return redirect('reviews')
Other case you need to return other HTTP Response outside of if form.is_valid():
, you can see the django documentation of writing views: https://docs.djangoproject.com/en/4.0/topics/http/views/
Upvotes: 0