[Answer]-Which model fields can be used with a radio widget(via a modelform)?

1👍

You need to make it into a ChoiceField instead of a BooleanField with a choice for each and a RadioWidget in order for it to display radio buttons.
https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ChoiceField

If you want to keep the boolean field, you will most likely have to do some hacking to create your own field/widget.


# views.py
class SettingsView(FormView):
    template_name = 'settings.html'
    success_url = 'settings/saved/'
    form_class = NicknameForm

    def get_form(self, form_class):
        """
        Returns an instance of the form to be used in this view.
        """
        form = super(SettingsView, self).get_form(form_class)

        if 'show_nickname' in form.fields:
            profile = self.request.user.get_profile()
            form.fields['show_nickname'].initial = profile.show_nickname

        return form

    def post(self, request, *args, **kwargs):
        profile = request.user.get_profile()
        if request.POST['show_nickname'] == 'False':
            profile.show_nickname = False
            profile.save()
        elif request.POST['show_nickname'] == 'True':
            profile.show_nickname = True
            profile.save()

        return super(NicknameFormView, self).post(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        """
        To be able to use 'show_nickname_form' instead of plain 'form' in the template.
        """
        context = super(NicknameFormView, self).get_context_data(**kwargs)
        context["show_nickname_form"] = context.get('form')
        return context

Leave a comment