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.Fieldor 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.