我有一个Django Model
,其值字段为models.CharField
。
相应的表单始终通过ModelForm
生成,但遵循一些自定义逻辑,我有时会将与值关联的默认字段替换为forms.BooleanField
。
有没有办法确定forms.BooleanField
期望和返回的实际值,而不是默认的True
和False
? (我想在我的模型字段中使用字符' 1'和' 0'。
以重要性的升序告诉我更换默认forms.Field
的原因:
forms.Field
验证。答案 0 :(得分:2)
正如丹尼尔所说,我认为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()