What is Django forms?
Why Interviewers Ask This
This is a classic screening question for Django roles. Hiring managers ask it early in interviews to gauge your baseline understanding and determine if you can communicate technical concepts clearly.
Answer
Django's forms system handles HTML form rendering, data validation, and cleaning. Two types: Form: standalone form: from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=100, widget=forms.TextInput(attrs={"class": "form-control"})) email = forms.EmailField() message = forms.CharField(widget=forms.Textarea(attrs={"rows": 5})) rating = forms.IntegerField(min_value=1, max_value=5) agree_terms = forms.BooleanField() def clean_email(self): email = self.cleaned_data["email"] if User.objects.filter(email=email).exists(): raise forms.ValidationError("Email already registered.") return email def clean(self): # Cross-field validation cleaned = super().clean() return cleaned. ModelForm: auto-generates form from model: class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ["title", "content", "tags"] exclude = ["author"] widgets = {"content": forms.Textarea(attrs={"rows": 20})}. View usage: def create_article(request): if request.method == "POST": form = ArticleForm(request.POST, request.FILES) if form.is_valid(): article = form.save(commit=False); article.author = request.user; article.save(); return redirect("article-list") else: form = ArticleForm() return render(request, "create.html", {"form": form}). Template rendering: {{ form.as_p }}, {{ form.as_table }}, or individual fields: {{ form.title.label_tag }}{{ form.title }}{{ form.title.errors }}. Validation: field-level (clean_fieldname()), form-level (clean()). form.cleaned_data contains validated data.
Common Mistake
A common mistake is memorizing definitions without understanding implications. When asked this question, go one level deeper — explain what happens when this concept is misused or ignored.