是否可以自定义form.Booleanfield对应" true"和"假"值?

时间:2015-08-21 10:55:01

标签: python django django-models django-forms

我有一个Django Model,其字段为models.CharField

相应的表单始终通过ModelForm生成,但遵循一些自定义逻辑,我有时会将与关联的默认字段替换为forms.BooleanField

有没有办法确定forms.BooleanField期望和返回的实际值,而不是默认的TrueFalse? (我想在我的模型字段中使用字符' 1'和' 0'。

以重要性的升序告诉我更换默认forms.Field的原因:

  • 向用户显示适合预期输入的小部件。
  • 获取forms.Field验证。

1 个答案:

答案 0 :(得分:2)

正如丹尼尔所说,我认为forms.ChoiceField更好。您已经提到它在模型中是models.CharField,但forms.BooleanField被设计为仅返回True / False值。另一方面,forms.ChoiceField可以接受任何固定的选择,您可以从多个小部件中进行选择以自定义显示。大多数情况下,我使用默认的SelectRadioSelect。由于您提到要为此特定情况使用字符串“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()

如果您不确定代码是否有效,请查看herehere

相关问题