Forms

Django Forms

Use Django's forms for handling user input, validation, and rendering HTML forms. Define forms in forms.py within each app.

Example:

from django import forms
from .models import User

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['name', 'email']

Form Validation

  • Use built-in field validators and custom validation methods (clean_<fieldname>, clean).
  • Provide clear error messages for invalid input.

Example:

class UserForm(forms.ModelForm):
    def clean_email(self):
        email = self.cleaned_data['email']
        if not email.endswith('@example.com'):
            raise forms.ValidationError('Email must be from example.com domain.')
        return email

Custom Fields

  • Create custom form fields by subclassing forms.Field or using third-party packages.
  • Use widgets for custom HTML rendering.

Example:

class ColorField(forms.CharField):
    def to_python(self, value):
        # Custom conversion logic
        return value.lower()

Best Practices

  • Keep forms focused on validation and data cleaning, not business logic.
  • Use ModelForms for forms tied to models; use regular forms for custom input.
  • Document form fields and validation logic.
  • Write tests for form validation and error handling.