博客五部曲之一 - 简单博客


1107 浏览 5 years, 3 months

21 更新实例视图

版权声明: 转载请注明出处 http://www.codingsoho.com/

在完成了创建和显示Post对象之后,我们下面将学习如何去编辑它们。

它的实现结合了详情视图和创建视图,会用到前面的表单和URL正则表达式知识等。

修改post_update函数,添加对form的处理以及将实例信息传给模板

from django.http import HttpResponse, HttpResponseRedirect

def post_update(request, id=None):
    instance = get_object_or_404(Post, id=id)    
    form = PostForm(request.POST or None, instance=instance)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        return HttpResponseRedirect(instance.get_absolute_url())
    context = {
        'form':form,
        "title" : instance.title,
        "instance" : instance
    }

    return render(request, 'post_form.html', context)

和创建视图不同,这儿在初始化PostForm时传递进了参数instance,这样,开始编辑时,当前instance的内容会作为初始内容显示,否则初始为空。 更新视图编辑完成之后,往往我们并不想继续停留在当前页面,通常是跳转到详情视图,这儿我们使用HttpResponseRedirect函数实现跳转,跳转地址可以直接从Model的get_absolute_url函数获取。创建视图成功之后,也可以执行相同的操作。

模板的名字修改为post_form.html,内容目前并不需要特别修改,它可以同时支持创建和鞥更新视图

更新URL,添加新的模式匹配

urlpatterns = [ 
url(r'^(?P<id>\d+)/edit$', views.post_update, name="update"),    
]