Django多项选择字段/复选框

我有一个Django应用程序,想要在用户的个人资料中显示多个选择复选框。然后,他们将能够选择多个项目。

这是我的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)

和我的形式课:

class ProfileForm(forms.ModelForm):

choice_field = forms.MultipleChoiceField(choices=SAMPLE_CHOICES, widget=forms.CheckboxSelectMultiple)

class Meta:

model = Profile

还有我的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))

我可以看到POST仅发送一个值:

choice_field u'choice_three' 

并且本地vars参数正在发送一个列表:

[u'choice_one', u'choice_two', u'choice_three']

所有表单字段都显示正确,但是当我提交POST时,我得到一个错误

错误绑定参数7-可能是不受支持的类型。

我是否需要在视图中进一步处理多项选择字段?模型字段类型正确吗?任何帮助或参考将不胜感激。

回答:

必须将配置文件选项设置为ManyToManyField才能正常工作。

所以…你的模型应如下所示:

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)

然后,同步数据库并使用所需的各种选项加载“选择”。

现在,ModelForm将自行构建…

class ProfileForm(forms.ModelForm):

Meta:

model = Profile

exclude = ['user']

最后,视图:

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))

应该提到的是,你可以通过几种不同的方式来建立配置文件,包括继承。也就是说,这也应该为你工作。

以上是 Django多项选择字段/复选框 的全部内容, 来源链接: utcz.com/qa/435969.html

回到顶部