Introduction
Django forms handle form rendering, validation, and processing.
Form Definition
from django import forms
class BookForm(forms.Form):
title = forms.CharField(max_length=200)
author = forms.CharField()
price = forms.DecimalField(max_digits=10, decimal_places=2)
published_date = forms.DateField(widget=forms.DateInput(attrs={"type": "date"}))
# Model Form (auto-generates from model)
from .models import Book
class BookModelForm(forms.ModelForm):
class Meta:
model = Book
fields = ["title", "author", "price", "published_date"]
Form Processing
def book_create(request):
if request.method == "POST":
form = BookModelForm(request.POST)
if form.is_valid():
form.save()
return redirect("book_list")
else:
form = BookModelForm()
return render(request, "books/form.html", {"form": form})
Form Templates
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
Practice Problems
- Create ModelForm from existing model
- Add custom field validation
- Style forms with widgets
- Handle multiple forms on one page
- Implement formset for multiple objects