首页 > 解决方案 > Django 更新视图似乎只适用于正则表达式 url

问题描述

我开始使用 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.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)

下面是我的 update-post.html:

<html>
<form method="POST" action="."> {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value="Change">
</form>

</html>

这是我的 urls.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"),
]

仅当我使用上述正则表达式 url 模式编辑帖子时,更新视图似乎才有效。

否则我会收到以下错误消息:

错误信息

有人可以告诉我我哪里出了问题。

标签: django

解决方案


推荐阅读