2010-09-09 96 views
10

什麼時候應該使用具有強制函數的TypedChoiceField而不是使用ChoiceField上的字段形式的乾淨方法?Django中的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) 

回答

11

我會使用clean_field方法做「繁重」。例如,如果您的字段需要非平凡的自定義清理和/或類型轉換等。另一方面,如果要求很簡單,例如強制爲int那麼clean_field可能是是一種矯枉過正。在這種情況下,TypedChoiceField將是最好的選擇。