将多个复选框保存到 Django ModelMultipleChoiceField
Saving multiple checkboxes to Django ModelMultipleChoiceField
我有这个表单域:
class NewVenueForm(forms.Form):
features = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(), queryset=hmod.Feature.objects.all(), required=False)
而这个模型:
class Feature(models.Model):
'''A feature that a listing has'''
name = models.CharField(max_length=255, blank=True, null=True)
description = models.CharField(max_length=500, blank=True, null=True)
def __str__(self):
return self.name
还有这个 HTML:
<form method="POST" enctype="multipart/form-data">
<div>
<div {% if form.title.errors %}class="field_error"{% endif %}>
Venue Title
{{ form.title }}
{{ form.title.errors }}
</div>
Features
<br/>
{% for key, value in form.features.field.choices %}
<input type="checkbox" id="{{value}}" value="{{key}}" name="feature">
<label for="{{value}}">
{{ value }}
</label>
{% endfor %}
<input type="submit" value="Save">
</div>
</form>
复选框看起来正常,但我无法将多个选择保存到功能 Django 表单字段。
我的 views.py 看起来像这样:
if request.method == 'POST':
form = NewVenueForm(request.POST)
if form.is_valid():
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
print(form.cleaned_data['features'])
我已经尝试过将值实际保存到模型中,但意识到我什至没有超过这一点。 . .打印出 form.cleaned_data returns 一个空列表:[]!!
有什么想法吗?任何帮助将不胜感激。
你的问题是一个简单的错字。您有 name="feature"
,与字段名称 features
不匹配。应该是:
<input type="checkbox" id="{{value}}" value="{{key}}" name="features">
顺便说一句,我会避免使用 id={{ value }}
。如果让 Django 使用 {{ form.features }}
为您呈现字段,那么输入 ID 将是 id_features_0
、id_features_1
等等。最好使用 id="id_feature_{{ key }}
之类的东西 - 模型多项选择字段的键应该是唯一的,但值可能不是。如果您更改此项,则需要更新 <label for="{{value}}">
以匹配。
我有这个表单域:
class NewVenueForm(forms.Form):
features = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(), queryset=hmod.Feature.objects.all(), required=False)
而这个模型:
class Feature(models.Model):
'''A feature that a listing has'''
name = models.CharField(max_length=255, blank=True, null=True)
description = models.CharField(max_length=500, blank=True, null=True)
def __str__(self):
return self.name
还有这个 HTML:
<form method="POST" enctype="multipart/form-data">
<div>
<div {% if form.title.errors %}class="field_error"{% endif %}>
Venue Title
{{ form.title }}
{{ form.title.errors }}
</div>
Features
<br/>
{% for key, value in form.features.field.choices %}
<input type="checkbox" id="{{value}}" value="{{key}}" name="feature">
<label for="{{value}}">
{{ value }}
</label>
{% endfor %}
<input type="submit" value="Save">
</div>
</form>
复选框看起来正常,但我无法将多个选择保存到功能 Django 表单字段。
我的 views.py 看起来像这样:
if request.method == 'POST':
form = NewVenueForm(request.POST)
if form.is_valid():
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
print(form.cleaned_data['features'])
我已经尝试过将值实际保存到模型中,但意识到我什至没有超过这一点。 . .打印出 form.cleaned_data returns 一个空列表:[]!!
有什么想法吗?任何帮助将不胜感激。
你的问题是一个简单的错字。您有 name="feature"
,与字段名称 features
不匹配。应该是:
<input type="checkbox" id="{{value}}" value="{{key}}" name="features">
顺便说一句,我会避免使用 id={{ value }}
。如果让 Django 使用 {{ form.features }}
为您呈现字段,那么输入 ID 将是 id_features_0
、id_features_1
等等。最好使用 id="id_feature_{{ key }}
之类的东西 - 模型多项选择字段的键应该是唯一的,但值可能不是。如果您更改此项,则需要更新 <label for="{{value}}">
以匹配。