Django 表单 |集团模式 |多选 |使用 MultiSelect 小部件从表单中仅获取单个值

Django Form | Group Model | MultiSelect | getting only single value from the form by using MultiSelect widget

我正在尝试从模板中获取用户的输入,我在 Django 身份验证模型中的组模型中显示模板中可用的组列表,并期望有多个值。 但即使选择多个选项也只返回单个值

from django.contrib.auth.models import Group

class MyForm(forms.ModelForm):
    
    the_choices = forms.ModelMultipleChoiceField(queryset=Group.objects.all(),
                                                 required=False, 
                                                 widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Group
        exclude = ['name', 'permissions']

    
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)

views.py

from .forms import MyForm
from django.shortcuts import render
from django.views.generic import View

class see(View):

    def __init__(self):
        pass

    def get(self, request):
        context ={}
        context['form']= MyForm()
        return render(request, "home.html", context)
    
    def post(self, request):
        print(request.POST.get('the_choices'))

        return HttpResponse('Great!')

模板 - 输入表单图像

控制台输出

请参考图 2,我希望控制台中有 1 和 2(首选组名),但它只返回 2。

如果您访问 request.POST.get('key')(或 request.POST['key']),您只会获得与该键关联的 last 值。

您使用 .getlist(…) method [Django-doc] 访问所有值:

print(request.POST.getlist('the_choices'))

但通常您使用表单本身处理数据,所以:

form = MyForm(request.POST, request.FILES)
if form.is_valid():
    print(form<strong>.cleaned_data['the_choices']</strong>)

这也将清理数据和 return 模型对象,而不是它们的主键。

使用getlist

https://docs.djangoproject.com/en/4.0/ref/request-response/#django.http.QueryDict.getlist

试试这个

the_choices = request.POST.getlist('the_choices')