正如丹尼爾所說,我認爲forms.ChoiceField
更好。您已經提到過,這是模型中的models.CharField
,但forms.BooleanField
被設計爲僅返回True/False值。另一方面,forms.ChoiceField
可以接受任何固定的選擇,您可以從多個小部件中進行選擇以自定義顯示。大多數情況下,我使用默認的Select
或RadioSelect
。既然你提到你想使用字符串「1」和「0」的這種特殊情況下,你可以這樣做:
blah_field = forms.ChoiceField(choices=(('1', 'Yes'), ('0', 'No')))
或:
blah_field = forms.ChoiceField(choices=(('1', 'Yes'), ('0', 'No')),
widget=forms.RadioSelect)
另外,如果你真的想使用複選框,也可以使用forms.BooleanField
。而不是做任何驗證,這是不需要的,你有責任編寫代碼來自己將True
轉換爲'1'
,False
到'0'
,這根本不復雜。
首先,你需要確保你的Models.CharField
有null=True
就可以了。總之,做views.py
,轉換在那裏你會保存表單:
form = BlahForm(request.POST)
if form.is_valid():
blah_field_value = form.cleaned_data['blah_field']
blah_value = '1' if blah_field_value else '0'
new_blah_obj = form.save(commit=False)
new_blah_obj.blah_field = blah_value
new_blah_obj.save()
如果你不知道該代碼是幹什麼的,請看看here和here。
你這樣做是因爲你想要一個複選框小部件嗎?因爲將CharField的小部件更改爲滿足您的要求的自定義小部件可能是一個更好的主意。 – henrikstroem
@henrikstroem感謝您的評論。複選框小部件確實是我想要這樣做的原因之一。然而,主要原因是我希望表單驗證提供的「用戶輸入」確實是二元選擇這一事實,而且我的理解是,**驗證**實際上是「forms.Field」業務。 –
那麼你最好使用forms.ChoiceField。 –