首页 > 解决方案 > 无法在视图函数中获取表单数据:Django

问题描述

我需要通过下拉菜单和提交按钮将字符串提交给视图函数。

在我的模板中,我有:

<form action="{% url 'exec_task' %}" method="post">
    {% csrf_token %}
    <select id="select_task" form="select_task" name="select_task">
        {% for task in available_tasks %}
          <option id="selected_task" value="{{ task }}">{{ task }}</option>
        {% endfor %}
    </select>
    <input class="button" type="submit" value="Run Selected Task">
</form>

在我看来,我有:

def exec_task(request):
  if request.method == 'POST':
    task = request.POST.get('select_task')
    print(task)
    getattr(tasks, task)(0)
  return redirect('management')

print(task) 始终显示为 None,当我尝试通过下一行中的 getattr 调用它时会产生错误。

我已经阅读了我可以找到的所有问题和教程,但我不知道我做错了什么,但是当我打印 request.POST 对象时,我得到的只是 csrf 令牌。QueryDict 中没有其他内容。

有任何想法吗?

标签: pythondjangopostdrop-down-menu

解决方案


如评论中所述,请删除

form="select_task"从选择标签。

所以最终的选择标签/ html将是。

<form action="{% url 'exec_task' %}" method="post">
    {% csrf_token %}
    <select id="select_task" name="select_task">
        {% for task in available_tasks %}
          <option id="selected_task" value="{{ task }}">{{ task }}</option>
        {% endfor %}
    </select>
    <input class="button" type="submit" value="Run Selected Task">
</form>

推荐阅读