【问题标题】:How to manage post method request in Django如何在 Django 中管理 post 方法请求
【发布时间】:2016-05-04 09:50:23
【问题描述】:

我无法从以下 POST 表单中获取正确的数据:

view.py

queryset=ExampleT.objects.filter(id=var_id).order_by('value1')
form = HiddenForm(initial={'ids': [o.id for o in queryset]})
return render(request, 'test.html', {'form': form})

form.py

class HiddenForm(forms.Form):
ids = forms.MultipleChoiceField(widget=forms.MultipleHiddenInput())

输出:

<input id="id_ids_0" name="ids" type="hidden" value="10" />
<input id="id_ids_1" name="ids" type="hidden" value="1" />
<input id="id_ids_2" name="ids" type="hidden" value="2" />

这是request.POST的值:

<QueryDict: {u'csrfmiddlewaretoken': [u'g2ktgFpDA5aa3BK2Baaes2nAexxKKh4Y'], u'ids': [u'1', u'2', u'10']}>

如何在数组中获取 3 个值,可能按 [10, 1, 2] 的顺序?

我试过这段代码,但它只返回一个值:

var_for=request.POST.get('ids')
    for tmp_var in range(len(var_for)):
        print var_for[tmp_var]

【问题讨论】:

  • 您使用的是request.POST.get(),只会返回一个值。要返回值列表,您需要request.POST.getlist('ids')。但是,最好从表单的已清理数据中获取值,如下面的答案所示。

标签: django django-forms django-templates django-views


【解决方案1】:

试试这个

form = HiddenForm(request.POST)
if form.is_valid():
    var_for = form.cleaned_data['ids']

【讨论】:

    【解决方案2】:

    始终使用form.cleaned_data 并检查form.is_valid()

    def myview(request):
    
        if request.method == 'POST': # If the form has been submitted...
            form = HiddenForm(request.POST) # A form bound to the POST data
            if form.is_valid(): # All validation rules pass
                # Process the data in form.cleaned_data
                # ...
                ids = form.cleaned_data['ids']
                # ... return some sort of http response
        else:
            queryset=ExampleT.objects.filter(id=var_id).order_by('value1')
            form = HiddenForm(initial={'ids': [o.id for o in queryset]})
    
        return render(request, 'test.html', {'form': form})
    

    【讨论】:

    • 条件if form.is_valid(): 对我永远不起作用。会不会是从查询集 form = HiddenForm(initial={'ids': [o.id for o in queryset]}) 创建表单?
    • 如果表单无效,那么form.errors 应该会告诉你一些事情
    • 谢谢,我现在看到了错误,但我不知道原因&lt;ul class="errorlist"&gt;&lt;li&gt;ids&lt;ul class="errorlist"&gt;&lt;li&gt;Select a valid choice. 10 is not one of the available choices.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
    • 当您定义MultipleChoiceField 时,您应该定义哪些是允许的选择,请参见此处stackoverflow.com/questions/29185867/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多