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')
我正在尝试从模板中获取用户的输入,我在 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')