ModelForm generates HTML forms from model fields—validation and saving stay DRY. One model drives admin, API serializers, and user-facing forms.
Basic ModelForm
from django.forms import ModelForm
from .models import Article
class ArticleForm(ModelForm):
class Meta:
model = Article
fields = ["title", "body", "published"]
View pattern
if request.method == "POST":
form = ArticleForm(request.POST)
if form.is_valid():
form.save()
return redirect("index")
else:
form = ArticleForm()
Important interview questions and answers
- Q: ModelForm vs Form?
A: ModelForm ties to a model and can save(); plain Form is for non-model data. - Q: Excluding fields?
A: Usefieldsorexclude—never expose sensitive fields like is_superuser. - Q: CSRF?
A: POST forms need{% csrf_token %}—Django validates the token.
Self-check
- What does
form.is_valid()do? - Why list explicit fields in Meta?