Django:从具有多个值的表单字段中获取数据

Django:从具有多个值的表单字段中获取数据,django,validation,django-forms,multichoiceitems,Django,Validation,Django Forms,Multichoiceitems,目前,我正在构建一个django支持的web应用程序,用于从主表中显示过滤后的数据。我已经创建了一个表单,用户将在其中指定他/她的选择,并根据表单值显示数据(以表格形式)。 我的问题是,我无法从具有多个值的表单字段中获取数据。我使用“request.POST.get('fieldname','')从表单中获取数据,但对于多个值字段,它会显示最后一个值 示例: 如果用户在formfield“模块”中选择第一、第二和第四个选项 request.POST.get('Modules','') 只给了我第

目前,我正在构建一个django支持的web应用程序,用于从主表中显示过滤后的数据。我已经创建了一个表单,用户将在其中指定他/她的选择,并根据表单值显示数据(以表格形式)。 我的问题是,我无法从具有多个值的表单字段中获取数据。我使用“request.POST.get('fieldname','')从表单中获取数据,但对于多个值字段,它会显示最后一个值

示例: 如果用户在formfield“模块”中选择第一、第二和第四个选项

request.POST.get('Modules','')

只给了我第四个选择。我希望我能说清楚

views.py forms.py
类一致性表单(forms.Form):
客户=forms.ModelChoiceField(
label=“客户名称”,
widget=forms.Select,
queryset=Customer.objects.all(),
空标签=无,
)
严重性级别=forms.modelcoocefield(
label=“严重级别”,
widget=forms.Select,
queryset=临界性.objects.all(),
空标签=无,
)
query\u status=forms.ModelChoiceField(
widget=forms.Select,
label=“查询状态”,
queryset=Status.objects.all(),
空标签=无,
help_text=“
” ) Modules=forms.modelmultipechoicefield( label=“业务模块”, widget=forms.CheckboxSelectMultiple, queryset=Modules.objects.all(), ) Components=forms.ModelMultipleChiceField( widget=forms.CheckboxSelectMultiple, queryset=Component.objects.all(), )
模板文件
{%extends'home/base.html%}
{%block title%}一致性报告{%endblock%}
{%block content%}
{%csrf_令牌%}
{{form}}

{%endblock%}
您必须使用“getlist”方法:

request.POST.getlist('Modules')

见:

  • (如果链接变旧,请将3.0更改为django的当前版本)

虽然这是事实,但OP应该始终使用清洁的数据,而不是将其用于某些字段和其他字段的request.POST。@DanielRoseman我可以将清洁的数据选项用于非表单字段变量,如“customername”和“bpc\u name”吗“也是?很抱歉投了反对票。。我其实是想提高投票率,但我没办法纠正这一点。
def consisreportgen(request):
if request.method == 'POST':
    form = ConsistencyForm(request.POST or None)
    if form.is_valid():
        form_user_data = ConsistencyForm(request.POST)
        Customer=form.cleaned_data['Customer']
        Components=form.cleaned_data['Components']
        Modules=form.cleaned_data['Modules']
        customername=request.POST.get('Customer','')
        modules_choosen=request.POST.get('Modules','')
        bpc_choosen=request.POST.get('Components','')
        severity=request.POST.get('Severity_level','')
        print(modules_choosen)
        print(customername)
        print(severity)
        print(bpc_choosen)
        return HttpResponseRedirect('/consistency/results/')

else:
    form = ConsistencyForm

return render(request,'consistency/consistency.html', {'form': form})
class ConsistencyForm(forms.Form):
Customer=forms.ModelChoiceField(
    label="Customer Name",
    widget=forms.Select,
    queryset=Customer.objects.all(),
    empty_label=None,
    )

Severity_level=forms.ModelChoiceField(
     label="Severity Level",
    widget=forms.Select,
    queryset=Criticality.objects.all(),
    empty_label=None,
    )

query_status=forms.ModelChoiceField(
    widget=forms.Select,
    label="Query Status",
    queryset=Status.objects.all(),
    empty_label=None,
    help_text="</br>"
   )


Modules=forms.ModelMultipleChoiceField(
     label="Business Module",
    widget=forms.CheckboxSelectMultiple,
    queryset=Modules.objects.all(),
    )

Components=forms.ModelMultipleChoiceField(
    widget=forms.CheckboxSelectMultiple,
    queryset=Component.objects.all(),
    )
 {% extends 'home/base.html' %}
 {% block title %}Consistency Report {% endblock %}

 {% block content %}

 <form action=" " method="post">
 {% csrf_token %}
{{ form }} 
<br />
<input type="submit" value="Generate Report" />

</form>
{% endblock %}