python – 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时,我收到错误

Error binding parameter 7 – probably unsupported type.

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

最佳答案
配置文件选项需要设置为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))

应该提到的是,您可以通过几种不同的方式设置一个配置文件,包括继承。也就是说,这也适用于你。

祝你好运。

转载注明原文:python – Django多重选择字段/复选框选择多个 - 代码日志