如何在Django中重定向到新创建的对象,而不使用Generic View的post_save_redirect参数

3 投票
3 回答
2831 浏览
提问于 2025-04-15 17:16

我想在保存一个表单后,把用户重定向到新创建的对象的 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)))

撰写回答