Reputation: 23722
When should you use TypedChoiceField with a coerce function over a ChoiceField with a clean method on the form for the field?
In other words why would you use MyForm over MyForm2 or vice versa. Is this simply a matter of preference?
from django import forms
CHOICES = (('1', 'A'), ('2', 'B'), ('3', 'C'))
class MyForm(forms.Form):
my_field = ChoiceField(choices=CHOICES)
def clean_my_field(self):
value = self.cleaned_data['my_field']
return int(value)
class MyForm2(forms.Form):
my_field = TypedChoiceField(choices=CHOICES, coerce=int)
Upvotes: 14
Views: 13739
Reputation: 74705
I would use a clean_field
method for doing "heavy lifting". For instance if your field requires non-trivial, custom cleaning and/or type conversion etc. If on the other hand the requirement is straightforward such as coercing to int
then the clean_field
is probably an overkill. TypedChoiceField
would be the way to go in that case.
Upvotes: 14