nsb*_*sbm 3 python forms django form-fields
我NullBooleanField在几个方面成功地实现了单选按钮,但问题是我无法将默认值设置为None.
这是代码:
models.py:
class ClinicalData(models.Model):
approved = models.NullBooleanField()
...
forms.py:
NA_YES_NO = ((None, 'N/A'), (True, 'Yes'), (False, 'No'))
class ClinicalDataForm(ModelForm):
approved = forms.BooleanField(widget=forms.RadioSelect(choices=NA_YES_NO))
class Meta:
model = ClinicalData
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:default:None在inital:None表单中的模型和/或设置中以及在表单实例的视图中进行设置.
这些都不是成功的.我目前正在使用CharField而不是NullBooleanField.
但有没有办法得到这个结果NullBooleanField???
小智 8
我知道这已经回答了一段时间了,但我也试图解决这个问题,并遇到了这个问题.
在尝试了emyller的解决方案之后,它似乎有效,但是当我查看表单时self.cleaned_data,我看到我得到的值都是True或者None,没有False记录任何值.
我看着Django的代码,发现确实而正常NullBooleanField选择做图None,True,False以1,2,3分别RadioSelect映射1到True,0到False和任何其他价值None
这是我最终使用的:
my_radio_select = forms.NullBooleanField(
required=False,
widget=widgets.RadioSelect(choices=[(1, 'Yes'), (0, 'No'), (2, 'N/A')]),
initial=2, # Set initial to 'N/A'
)
Run Code Online (Sandbox Code Playgroud)
出于某种奇怪的原因 - 我没有在 Django 代码中检查它 - 一旦您为 NullBooleanField 提供自定义小部件,它就不再接受您期望的值 ( None,True或False) 。
通过分析内置的选择属性,我发现这些值等于分别1,2和3。
所以,这是我应该坚持使用“未知”作为默认单选按钮的快速而肮脏的解决方案:
class ClinicalDataForm(forms.ModelForm):
class Meta:
model = ClinicalData
def __init__(self, *args, **kwargs):
super(ClinicalDataForm, self).__init__(*args, **kwargs)
approved = self.fields['approved']
approved.widget = forms.RadioSelect(
choices=approved.widget.choices)
approved.initial = '1'
Run Code Online (Sandbox Code Playgroud)
它看起来不太好,除非非常必要,否则我不会使用它。但它就在那里,以防万一。