【问题标题】:Django redirect in admin failed管理员中的 Django 重定向失败
【发布时间】:2013-11-15 00:30:24
【问题描述】:

通过单击管理界面中的 saveasnew 按钮保存对象后,我想重定向到另一个 url:

admin.py
class AirplanesAdmin(admin.ModelAdmin):

def save_model(self, request, obj, form, change):
    obj.save()
    if "_saveasnew" in request.POST:
        self.message_user(request, 'YAY!!!')
        return HttpResponseRedirect(reverse('admin:routes_airplanes_change',
                                    args=(obj.pk,),
                                    current_app=self.admin_site.name))

显示了 "YAY" 消息...但是 django 将我重定向到 pbject 页面列表中,而不是新的对象页面...即使此代码也不起作用:

admin.py
class AirplanesAdmin(admin.ModelAdmin):

def save_model(self, request, obj, form, change):
    obj.save()
    if "_saveasnew" in request.POST:
        self.message_user(request, 'YAY!!!')
        redirect('http://example.com')

我看到 "YAY",但它再次将我重定向到列表对象...我做错了什么?

【问题讨论】:

  • 你需要返回redirect()
  • 不幸的是,这没有帮助。 django 没问题?我使用的是 1.5.5 版本

标签: python django django-admin


【解决方案1】:

save_model 返回无。它的结果不在任何地方使用。所以不管返回什么(redirect(...)None

我觉得

def response_add(self, request, new_object):
    pass

def response_change(self, request, new_object):
    pass

是您正在寻找的。​​p>

如果我们查看 django 源代码,我们将看到以下内容:

def response_change(self, request, obj):
    """
    Determines the HttpResponse for the change_view stage.
    """

def response_add(self, request, obj, post_url_continue=None):
    """
    Determines the HttpResponse for the add_view stage.
    """

【讨论】:

  • 是的,这对我有用...但在 admin.py 我需要覆盖整个方法 response_add...这是唯一的方法吗?我的意思是,为什么重定向不能从 save_model 方法工作?..
  • 重定向无效,因为save_model 返回None。它的结果不在任何地方使用。并且重定向结果不是异常,而只是响应实例。
  • 我明白了...好吧,问题通过覆盖 response_add 方法解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2012-09-10
  • 2012-09-24
  • 2021-03-24
相关资源
最近更新 更多