Django Tutorial Part 2: Handling Forms and User Input (2025 Beginner Guide)

In Part 1, you created a basic Django app with views, models, templates, and admin. In this post, you’ll learn how to handle user input by creating forms and saving data to your database using Django’s built-in form features.

What You’ll Learn

  • Create a Django Form class
  • Render the form in a template
  • Handle form submission (POST)
  • Validate user input
  • Save form data to the database

Step 1: Update Your Model

Let’s use the same Post model from Part 1. If not already created:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
        return self.title

Step 2: Create a Django Form

In myapp/forms.py, create this form:

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

Step 3: Add View for the Form

In myapp/views.py:

from django.shortcuts import render, redirect
from .forms import PostForm

def create_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('home')
    else:
        form = PostForm()
    return render(request, 'myapp/create_post.html', {'form': form})

Step 4: Add URL Route

In myapp/urls.py:

from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('create/', views.create_post, name='create_post'),
]

Step 5: Create the HTML Form Template

In templates/myapp/create_post.html:

<h1>Create New Post</h1>

<form method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Submit</button>
</form>

Step 6: Link to Create Post Page

In your home.html, add a link:

<a href="{% url 'create_post' %}">Create a New Post</a>

Conclusion

You’ve successfully created a dynamic form in Django that accepts user input, validates it, and saves it to the database. This is the foundation for building blogs, comment systems, contact forms, and more.

In Part 3, we’ll cover user authentication so you can add login, logout, and user registration features!

Leave a Reply