The 'attrs' argument to the Widget class used with each particular
Field (the Widget is what actually renders the HTML) accepts a
dictionary which will become HTML attribute names and values. For
example:
username = forms.CharField(widget=forms.TextInput(attrs={'class': 'myclass'}))
will become:
<input type="text" class="myclass" />
--
"Bureaucrat Conrad, you are technically correct -- the best kind of correct."
If you want custom behavior from the form, you should probably be
writing a custom form class.