为什么我无法保存Django ModelForm博客的编辑?

时间:2019-09-18 03:41:21

标签: django python-3.x modelform

我正在做Python Crash Course Ex。 19-1:博客,现在我要保存任何博客的编辑内容。我尝试在blog.html中插入.errors代码(用于显示每个博客),但是什么也没显示,所以我猜我的模板没有字段错误(?)


我认为有些代码对于解决非节省型编辑问题至关重要。 views.py中的new_blog函数可以正常工作,因此我将其跳过。

views.py中的edit_blog函数:

def edit_blog(request, blog_id):
    idk = BlogPost.objects.get(id = blog_id)
    if request.method != "POST":
        form = BlogForm(instance = idk)
    else:
        form = BlogForm(instance = idk, data = request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('blogs:blogs'))

    content = {"editing_blog": form, "psst": idk}
    return render(request, 'blogs/edit_blog.html', content)

new_blog.html:

{% extends "blogs/all.html" %}

{% block content %}
    <p>Write a new blog:</p>

    <form action="{% url 'blogs:new_blog' %}" method='post'>
        {% csrf_token %}
        <table border="1">
            {{ new_blog }}
        </table>
        <p></p>
        <button name="submit">Submit</button>
    </form>

{% endblock content %}

edit_blog.html:

{% extends "blogs/all.html" %}

{% block content %}
    <p>Edit the blog:</p>

    <form action="{% url 'blogs:blog' psst.id %}" method='post'>
        {% csrf_token %}
        <table border="1">
            {{ editing_blog }}
        </table>
        <p></p>
        <button name="submit">Save changes</button>
    </form>

{% endblock content %}

顺便说一句,网址格式在这里:

from django.urls import path, include
from . import views

app_name = 'blogs'

urlpatterns = [
    # Home page
    path('', views.homepage, name = 'homepage'),

    # Show all blogs.
    path('blogs/', views.blogs, name = 'blogs'),

    # Show the detail of a blog.
    path('blogs/<int:blog_id>', views.blog, name = 'blog'),

    # Page for adding a new blog.
    path('new_blog/', views.new_blog, name = 'new_blog'),

    # Page for editing a blog.
    path('edit_blog/<int:blog_id>', views.edit_blog, name = 'edit_blog'),
]

无论我如何更改标题,内容或两个博客,我都看不到所做的更改。是吗?

A)我在edit_blog.html中的表单操作出错了,如wakandan所述?

B)我需要在edit_blog视图功能中进行一些调整,例如Bibhas所说的?

非常感谢。还告诉我是否需要添加更多代码来理解。

1 个答案:

答案 0 :(得分:1)

您的表单操作当前设置为{% url 'blogs:blog' psst.id %},这意味着您正在发布到views.blog视图,这只是一个详细视图。您需要将操作更改为{% url 'blogs:edit_blog' psst.id %},以便将该表单发布到您的编辑视图中。

从您发布的代码中尚不清楚editing_blog上下文变量的来源-您需要确保这是您的编辑视图所查找形式的实例,否则您将会遇到其他问题。

最后还要注意,您当前不处理表单有错误的情况-即,没有为else指定form.is_valid()条件。