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
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.