Handle GET and POST in One FBV
A common FBV pattern for form rendering and processing.
# models.py
from django.db import models
class Feedback(models.Model):
email = models.EmailField()
message = models.TextField()
# admin.py
from django.contrib import admin
from .models import Feedback
@admin.register(Feedback)
class FeedbackAdmin(admin.ModelAdmin):
list_display = ("email",)
# forms.py
from django import forms
class FeedbackForm(forms.ModelForm):
class Meta:
from .models import Feedback
model = Feedback
fields = ["email","message"]
# views.py
from django.shortcuts import render, redirect
from .forms import FeedbackForm
def feedback(request):
if request.method == "POST":
form = FeedbackForm(request.POST)
if form.is_valid():
form.save(); return redirect("thanks")
else:
form = FeedbackForm()
return render(request, "feedback.html", {"form": form})
# templates/feedback.html
<h2>Send Feedback</h2>
<form method="post">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="mb-3">
{{ form.email.label_tag }}
{{ form.email }}
{{ form.email.errors }}
</div>
<div class="mb-3">
{{ form.message.label_tag }}
{{ form.message }}
{{ form.message.errors }}
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Explanation:
- Pattern: render empty form on GET, validate and save on POST.
- Always redirect after successful POST (PRG pattern).
- Category Views (FBV & CBV)
- Total Views 975
- Last Modified 21 November, 2025
- Tags #fbv #post #get #forms
Previous snippet
Method Decorators on Class-Based Views
Next snippet