如何在Django中重定向到新创建的对象,而不使用Generic View的post_save_redirect参数
我想在保存一个表单后,把用户重定向到新创建的对象的 object.get_absolute_url()
。我没有使用通用视图,所以不能用 post_save_redirect
这个参数。相关的 view
代码部分是这样的:
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('story_detail', args=(story.user, story.id)))
那么,我该如何在 form.save()
和 HttpResponseRedirect
之间获取到 story
对象,以便我可以进行 reverse
查找呢?
3 个回答
1
补充一下其他回答,现在你可以直接调用 redirect
方法来处理一个对象,这个方法会去查找这个对象的 get_absolute_url
方法。如果你已经设置了这个方法,只需要写:
return redirect(obj)
3
使用反向和重定向
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.urls import reverse
# inside def
if form.is_valid():
story = form.save()
messages.success(request, 'Story created successfully!')
return redirect(reverse('story_detail', kwargs={'story':story.id}))
6
一个 ModelForm
的保存方法会返回新创建的模型实例。这意味着在你的情况下,你应该能够使用以下内容:
if form.is_valid():
story = form.save()
return HttpResponseRedirect(reverse('story_detail', args=(story.user, story.id)))