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 attrs to add CSS classes and placeholders.
  • Prefer ChoiceField + Select for dropdowns; use RadioSelect for radios.
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.