我无法访问表单" name"或"价值"在Django的request.POST中

时间:2017-05-23 18:33:22

标签: python django forms

我的模板内容包含多个按钮的多个表单。

我已经阅读了这些主题:

Proper way to handle multiple forms on one page in Django

How can I build multiple submit buttons django form?

How can I access the form submit button value in Django?

我完全一样,包括"名称"和"价值"在表单的输入中(也尝试使用按钮标记)

但"名称"属性在POST请求中不存在。我做错了什么?

模板:

<div class="container" align="center" style="border: solid 3px red">
    <h3>Form 1</h3>
    <form id="form_step_1" method="post" action="{% url 'ajax_order_data' %}" align="center">
            {% csrf_token %}
            {{ FormStep1 }}
            <button type="submit" name="step_1" value="step_1">button_step1</button>
    </form>
</div>

<br>

<div class="container" align="center"  style="border: solid 3px red">
    <h3>Form 2</h3>
    <form id="form_step_2" method="post" action="{% url 'ajax_order_data' %}" align="center">
            {% csrf_token %}
            {{ FormStep2 }}
            <button type="submit" name="step_2" value="step_2">button_step2</button>
    </form>
</div>

<script>
    var form_1 = $("#form_step_1");
    var form_2 = $("#form_step_2");

    form_1.submit(function(e){
        e.preventDefault();
        var url = $(form_1).attr('action');
        $.ajax({
          type: 'POST',
          url: url,
          data: form_1.serialize(),
          dataType: 'json',
          success: function (data) {smth_1}
        })
    });

    form_2.submit(function(e){
        e.preventDefault();
        var url = $(form_2).attr('action');
        $.ajax({
          type: 'POST',
          url: url,
          data: form_2.serialize(),
          dataType: 'json',
          success: function (data) {smth_2}
        })
    });
</script>

视图:

def somefunc(request):
if request.method == 'POST':
    if 'step_1' in request.POST:

1 个答案:

答案 0 :(得分:1)

您已明确禁用了正常的表单提交过程,并在Ajax中将数据作为JSON发送。所以你不能在Django中使用处理表格编码数据的常规方法,因为你还没有。

相反,你需要反序列化请求的主体,这会给你一个字典:

data = json.loads(request.body)
if 'step_1' in data: