猿问

form.save() 不工作我的 form.save 更新数据不工作

form.save() 不工作我的 form.save 更新数据不工作当我尝试更新我的帖子它显示原始未经编辑的帖子它发送保存更新的版本。我不知道是什么导致错误 idk 如果它的视图或任何在模板如果有人可以提供帮助,我将不胜感激,请提供帮助。

这是代码:

views.py

from django.shortcuts import render

from django.shortcuts import HttpResponseRedirect

from .models import Post

from .forms import PostForm



def post_list(request):

    posts = Post.objects.all()


    context = {

        'post_list': posts

    }

    return render(request, "posts/post_list.html", context)



def post_detail(request, post_id):

    post = Post.objects.get(id=post_id)

    context = {

        'post': post

    }

    return render(request, "posts/post_detail.html", context)



def post_create(request):

    form = PostForm(request.POST or None)

    if form.is_valid():

        form.save()

        return HttpResponseRedirect('/posts')

    context = {

        "form": form,

        "form_type": 'Create'

    }

    return render(request, "posts/post_create.html", context)



def post_update(request, post_id):

    post = Post.objects.get(id=post_id)

    form = PostForm(request.POST or None, instance=post)

    if form.is_valid():

        form.save()

        return HttpResponseRedirect('/posts')

    context = {

        "form": form,

        "form_type": 'Update'

    }

    return render(request, "posts/post_update.html", context)



def post_delete(request, post_id):

    post = Post.objects.get(id=post_id)

    post.delete()

    return HttpResponseRedirect('/posts')

urls.py


from django.urls import path

from .views import post_list, post_detail, post_create, post_update, post_delete



urlpatterns = [

    path('', post_list),

    path('create/', post_create),

    path('<post_id>/', post_detail),

    path('<post_id>/update', post_update),

    path('<post_id>/delete', post_delete),

]

post_update.html


<h1>welcome to post {{ form_type }}</h1>


<form method="POST" action=".">

    {% csrf_token %}

    <p>{{ form.as_p }}</p>

    <button type="submit">{{ form_type }}</button>

</form>


湖上湖
浏览 130回答 1
1回答

暮色呼如

action="."带你从<post_id>/update到<post_id>/。您可以通过几种方式解决此问题:将其更改为action="",这将从提交<post_id>/update到<post_id>/update。在 URL 中添加斜杠,即path('<post_id>/update/', ...).&nbsp;然后action="."将从提交<post_id>/update/到<post_id>/update/使用{% url %}标签而不是对操作进行硬编码。在你的情况下,你需要做一些改变,所以我将把它作为一个挑战留给你。有关反转 URL 的文档应该有所帮助。
随时随地看视频慕课网APP

相关分类

Python
我要回答