Using widgets in Django Forms
A snippet showing how to use widgets in Django forms.
# forms.py
from django import forms
COLOR_CHOICES = [
("red", "Red"),
("green", "Green"),
("blue", "Blue"),
]
class ProfileForm(forms.Form):
username = forms.CharField(widget=forms.TextInput(attrs={"placeholder": "jane_doe", "class": "form-control"}))
password = forms.CharField(widget=forms.PasswordInput(attrs={"class": "form-control"}))
bio = forms.CharField(widget=forms.Textarea(attrs={"rows": 4, "class": "form-control"}), required=False)
favorite_color = forms.ChoiceField(choices=COLOR_CHOICES, widget=forms.Select(attrs={"class": "form-select"}))
<div class="row justify-content-center">
<div class="col-md-8 col-lg-6">
<form method="post" class="bg-white border rounded p-3">
{% csrf_token %}
<h5 class="mb-3">Edit Profile</h5>
<div class="mb-3">
<label class="form-label">Username</label>
{{ form.username }}
</div>
<div class="mb-3">
<label class="form-label">Password</label>
{{ form.password }}
</div>
<div class="mb-3">
<label class="form-label">Bio</label>
{{ form.bio }}
</div>
<div class="mb-3">
<label class="form-label">Favorite color</label>
{{ form.favorite_color }}
</div>
<button type="submit" class="btn btn-primary w-100">Save</button>
</form>
</div>
</div>
Explanation:
-
Widgets control HTML rendering; use
attrsto add CSS classes and placeholders. -
Prefer
ChoiceField+Selectfor dropdowns; useRadioSelectfor radios.