Django Multiple Choice Field / Checkbox Select Multiple
checkbox, django, python, select
Solution
The profile choices need to be setup as a ManyToManyField for this to work correctly.
So... your model should be like this:
class Choices(models.Model):
description = models.CharField(max_length=300)
class Profile(models.Model):
user = models.ForeignKey(User, blank=True, unique=True, verbose_name='user')
choices = models.ManyToManyField(Choices)
Then, sync the database and load up Choices with the various options you want available.
Now, the ModelForm will build itself...
class ProfileForm(forms.ModelForm):
Meta:
model = Profile
exclude = ['user']
And finally, the view:
if request.method=='POST':
form = ProfileForm(request.POST)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
else:
form = ProfileForm()
return render_to_response(template_name, {"profile_form": form}, context_instance=RequestContext(request))
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.
Problem
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.