🎸 Django Beginner

What is Django forms?

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.