将多个复选框保存到 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_0id_features_1 等等。最好使用 id="id_feature_{{ key }} 之类的东西 - 模型多项选择字段的键应该是唯一的,但值可能不是。如果您更改此项,则需要更新 <label for="{{value}}"> 以匹配。