Django更新视图似乎只适用于正则表达式URL
我正在使用Django,我有一个简单的用例,在这个用例中,我必须创建一个基于函数的视图来更新模型。以下是我的基于函数的查看函数:Django更新视图似乎只适用于正则表达式URL,django,Django,我正在使用Django,我有一个简单的用例,在这个用例中,我必须创建一个基于函数的视图来更新模型。以下是我的基于函数的查看函数: def update_post(request, id=None): obj = get_object_or_404(PostModel, id=id) form = PostModelForm(request.POST or None, instance=obj) if form.is_valid(): obj = form.
def update_post(request, id=None):
obj = get_object_or_404(PostModel, id=id)
form = PostModelForm(request.POST or None, instance=obj)
if form.is_valid():
obj = form.save(commit=False)
print(f"The object that i am going to save is {form.cleaned_data}")
obj.save()
messages.success(request, f"Updated object with id {id}")
return HttpResponseRedirect(f"/blog/read/{id}")
context = {
"form": form
}
return render(request, "blog/update-post.html", context)
下面是我的更新-post.html:
<html>
<form method="POST" action="."> {% csrf_token %}
{{form.as_p}}
<input type="submit" value="Change">
</form>
</html>
{%csrf_令牌%}
{{form.as_p}}
这是我的URL.py文件:
from django.urls import path, include
from django.conf.urls import url
from .views import list_posts, read_post, create_post, update_post
app_name = "blog"
urlpatterns = [
path('posts/', list_posts, name="list"),
path('read/<int:id>', read_post, name="read"),
path("create/", create_post, name="create"),
#url(r'^(?P<id>\d+)/edit/$', update_post, name="update")
path("update/<int:id>", update_post, name="update"),
]
从django.url导入路径,包括
从django.conf.url导入url
from.views导入列表帖子、读取帖子、创建帖子、更新帖子
app_name=“博客”
URL模式=[
路径('posts/',list_posts,name=“list”),
路径('read/',read_post,name=“read”),
路径(“创建/”,创建帖子,name=“创建”),
#url(r'^(?P\d+)/edit/$,update\u post,name=“update”)
路径(“update/”,update_post,name=“update”),
]
只有当我使用上面的正则表达式url模式来编辑文章时,更新视图才起作用
否则,我会收到以下错误消息:
有人能告诉我哪里出了问题。但是这里你没有包含主键:你的url是
/blog/update
?是的,但是我如何包含主键?我需要把它放在哪里?在模板或视图中?您可以将其写入action=“
”,但通过使用action=“.”
可以转到“目录”。您只需在此处省略操作=“
。非常感谢。这里的逻辑是什么?我应该经常使用action=“”??或者action有一个用例=“.too?那么”
意味着如果路径是/foo/bar
,它将指向/foo
,这可能会有一个用例,具体取决于您实现Web服务器的方式,但我认为基于您编写URL.py
的方式,可能不在这里。但在这里您没有包含主键:您的url是/blog/update
?是的,但如何包含主键?我需要把它放在哪里?在模板或视图中?您可以将其写入action=“
”,但通过使用action=“.”
可以转到“目录”。您只需在此处省略操作=“
。非常感谢。这里的逻辑是什么?我应该经常使用action=“”??或者action有一个用例=“.too?那么”
意味着如果路径是/foo/bar
,它将指向/foo
,这可能有一个用例,这取决于您实现Web服务器的方式,但我认为基于您编写URL.py
的方式,可能不在这里。