python复选框_关于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(_(''), 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:
hod =="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 params正在发送⼀个列表:
[u'choice_one', u'choice_two', u'choice_three']
所有的表单字段都显⽰正确,但是当我提交POST时,出现错误
Error binding parameter 7 - probably unsupported type.
我是否需要在视图中进⼀步处理多项选择字段? 模型字段类型正确吗? 任何帮助或参考将不胜感激。
您是否可以发布完整的堆栈跟踪信息以获取在POST时遇到的错误?
Django Model MultipleChoice的可能重复项
必须将配置⽂件选项设置为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']
django项目实例最后,视图:
hod=='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))
应该提到的是,您可以通过⼏种不同的⽅式来建⽴配置⽂件,包括继承。也就是说,这也应该为您⼯作。
祝好运。
谢谢布兰特。 您指出我的模型类型需要使⽤ManyToManyField关系是正确的。
请注意,使⽤save(commit = false)时需要在表单实例上调⽤save_m2m(),否则将不保存对关系的更改。 参见
docs.djangoproject/en/dev/topics/forms/modelforms/
我试图实现这⼀⽬标,但我却得到了NameError: name TheChoice is not defined
解决⽅案可以将Choice作为元组⽽不是原始问题中的Choice模型⼯作吗?
@brant也许值得添加⼀个建议,那就是postgresql⽤户可以使⽤ArrayFields来实现相同的功能(甚⾄具有更好的性能)
Brant的解决⽅案绝对正确,但是我需要对其进⾏修改,以使其与多个选择复选框和commit=false⼀起使⽤。这是我的解决⽅案:models.py
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'))
the_choices = models.ManyToManyField(Choices)
表格
class ProfileForm(forms.ModelForm):
the_choices = forms.ModelMultipleChoiceField(queryset=Choices.objects.all(), required=False,
widget=forms.CheckboxSelectMultiple)
class Meta:
model = Profile
exclude = ['user']
views.py
hod=='POST':
form = ProfileForm(request.POST)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
form.save_m2m() # needed since using commit=False
else:
form = ProfileForm()
return render_to_response(template_name, {"profile_form": form}, context_instance=RequestContext(request))
关于如何在Django模板中呈现多选字段的任何建议?
models.CharField是选项之⼀的CharField表⽰形式。您想要的是⼀组选择。似乎尚未在django中实现。
您可以为此使⽤多对多字段,但是这样做的缺点是必须将选择项放⼊数据库中。如果要使⽤硬编码选项,则可能不是您想要的。
/snippets/1200/上有⼀个django⽚段,它似乎可以通过实现ModelField MultipleChoiceField来解决您的问题。
ManyToManyField不是⼀个不错的选择。您可以使⽤⼀些代码⽚段来实现MultipleChoiceField。您可以从MultiSelectField中获取灵感,并使⽤逗号分隔值(Field + FormField)
但是它有⼀些错误,您可以安装django-multiselectfield,这是更加完美的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。