Django中的TypedChoiceField还是ChoiceField

14 投票
1 回答
13608 浏览
提问于 2025-04-16 03:53

什么时候应该使用带有强制转换函数的TypedChoiceField,而不是在表单中使用带有清理方法的ChoiceField呢?

换句话说,为什么你会选择MyForm而不是MyForm2,或者反过来?这仅仅是个人喜好吗?

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)

1 个回答

14

我会使用一个叫做 clean_field 的方法来处理一些比较复杂的事情。比如说,如果你的字段需要进行一些不简单的、特别的清理或者类型转换等操作。如果要求比较简单,比如说只是想把数据转换成 int 类型,那么使用 clean_field 可能就有点多余了。在这种情况下,使用 TypedChoiceField 会更合适。

撰写回答