博客五部曲之一 - 简单博客
1303 浏览 5 years, 11 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"),
]