I have a Django application and want to display multiple choice checkboxes in a user's profile. They will then be able to select multiple items.
This is a simplified version of my models.py:
from profiles.choices import SAMPLE_CHOICES
class Profile(models.Model):
user = models.ForeignKey(User, unique=True, verbose_name_('user'))
choice_field = models.CharField(_('Some choices...'), choices=SAMPLE_CHOICES, max_length=50)
And my form class:
class ProfileForm(forms.ModelForm):
choice_field = forms.MultipleChoiceField(choices=SAMPLE_CHOICES, widget=forms.CheckboxSelectMultiple)
class Meta:
model = Profile
And my views.py:
if request.method == "POST":
profile_form = form_class(request.POST, instance=profile)
if profile_form.is_valid():
...
profile.save()
return render_to_response(template_name, {"profile_form": profile_form,}, context_instance=RequestContext(request))
I can see that the POST is only sending one value:
choice_field u'choice_three'
And the local vars params is sending a list:
[u'choice_one', u'choice_two', u'choice_three']
All of the form fields display correct, but when I submit a POST, I get an error
Error binding parameter 7 – probably unsupported type.
Do I need to process the multiple choice field further in the view? Is the model field type correct? Any help or references would be greatly appreciated.
Best Answer
The profile choices need to be setup as a ManyToManyField for this to work correctly.
So... your model should be like this:
Then, sync the database and load up Choices with the various options you want available.
Now, the ModelForm will build itself...
And finally, the view:
It should be mentioned that you could setup a profile in a couple different ways, including inheritance. That said, this should work for you as well.
Good luck.