在url中传递参数后,django post方法无法正常工作

时间:2016-04-21 16:08:37

标签: django post django-models django-forms

我正在学习Django并努力学习它。当我从模板发布数据时,我不完全理解发生了什么。我有一个模型类Person,它定义了表中的字段。我正在使用表单来显示有关某人的信息,我可以查看某个人的信息,但我无法保存相同的信息。当我单击提交时,我找不到错误页面。我不明白为什么人们会在网址中附加两次。这有点让人困惑。我希望有人可以帮助我理解我哪里出错了。 请求网址:http://devops:8000/cms/person/person 这是我的代码:

forms.py:

class PersonView(ModelForm):
    class Meta:
        model = Person
        fields = ['FirstName','LastName','Address']

urls.py:

urlpatterns = patterns('cms',
    url(r'^workflowdetail/(?P<id>\d+)$', 'views.person',name='cms'),
)

views.py:

def person(request, id):
    person= get_object_or_404(Person, pk=id)
    if request.method == 'GET':
        form = Person(instance=person)
    else:
        form = Person(request.POST,instance=person)
        if form.is_valid():
            form.save()
    return render(request, 'person.html', {'form': form, 'id': id})

person.html

<form action="person" role="form" method="post">
    {% bootstrap_form form %}
</form>

1 个答案:

答案 0 :(得分:2)

表单中的action不正确。当您使用person时,这并不意味着它将使用person视图,这意味着该表单将提交给相对网址person

您可以使用url标记获取正确的网址:

<form action="{% url 'cms' id %}" role="form" method="post">

现在我将尝试解释网址中的双person/person来自哪里:

如果您从/cms/person/开始,则相对网址person/cms/person/person/。如果您从/cms/person/1开始,则相对网址person也是/cms/person/person/。由于您没有此网址模式,因此会出现404错误。

但是,如果您从/cms/person/1/开始,则相对网址person/cms/person/1/person/

出于这个原因,您可能会发现在网址中使用尾部斜杠更容易,例如。

r'^workflowdetail/(?P<id>\d+)/$

如果您这样做,则根本不需要表单标记中的action属性。

<form role="form" method="post">