Django: Display NullBooleanField as Radio and default to None
django, form-fields, forms, python
Solution
For some odd reason - I didn't check it at the Django code -, as soon as you provide a custom widget for a NullBooleanField, it doesn't accept the values you expect (`None`, `True` or `False`) anymore.
By analyzing the built-in choices attribute, I found out that those values are equal to, respectively, `1`, `2` and `3`.
So, this is the quick-and-dirty solution I fould to stick to radio buttons with 'Unknown' as default:
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'
It doesn't look good and I wouldn't use it unless very necessary. But there it is, just in case.
Problem
I am successfully implementing `NullBooleanField` as radio buttons in several ways but the problem is that I can not set the default value to None. Here is the code: ``` 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 ``` I tried the following methods: Set `default:None` in the model and/or setting `inital:None` in the form and also in the view in the form instance. None of that was successfull. Im currently using `CharField` instead of `NullBooleanField`. But is there some way to get this results with `NullBooleanField`???