表单发布到Django视图不会向数据库输入任何内容

时间:2017-03-17 08:37:52

标签: python django forms

所以,我试图用django将todo保存到数据库中。我的模板如下:

<form action="{% url 'todo:add' %}" method="POST">
    {% csrf_token %}
    <input type="text" id="text" value="{{new_todo_text}}"/>
    <input type="submit" value="Submit todo" />
</form>
{%if not_done_todos %}
    <ul>
        {%for todo in not_done_todos%}
            <li>
                <span>{{todo.text}}</span>
            </li>
        {%endfor%}
    </ul>
{%else%}
    <span>No todos for you!</span>
{%endif%}

我的观点,我试图捕捉“new_todo_text”看起来像这样:

def add(request):
    """Add todo to database"""
    new_todo = Todo(text=request.POST.get('new_todo_text'),
                    done=False, date_created=timezone.now())
    new_todo.save()
    return HttpResponseRedirect(reverse('todo:index'))

问题是,无论我添加到表单中,todo.text都会显示为空...我的问题是什么?

1 个答案:

答案 0 :(得分:2)

问题是您的input元素内部未声明name属性。 name attibute将被用作使用Django request.POST获取它的密钥。

所以,改为:

<input type="text" id="text" name="new_todo_text" value="{{new_todo_text}}"/>

request.POST dict-like将使用input&#39; namevalue 构建 dict。然后你可以做request.POST['input_name_here']之类的东西。