Skip to main content
 首页 » 编程设计

python之管理员中的 Django 重定向失败

2024年11月01日22lidabo

通过单击管理界面中的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”,但它再次将我重定向到列表对象...我做错了什么?

请您参考如下方法:

save_model返回无。并且它的结果没有在任何地方使用。所以返回什么并不重要( redirect(...) 或 None )

我觉得

def response_add(self, request, new_object): 
    pass 

和

def response_change(self, request, new_object): 
    pass 

是您正在寻找的。

如果我们查看 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. 
    """