2013-11-04 60 views
2

通過點擊管理界面saveasnew按鈕保存對象後,我想重定向到另一個網址:的Django的admin重定向失敗

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」,但它重定向我再次列表對象...我做錯了什麼?

+1

你需要返回重定向() – JamesO

+0

不幸的是,這並沒有幫助。 django沒關係嗎?我正在使用1.5.5版 – user2919162

回答

2

save_model return無。它的結果並沒有在任何地方使用。所以,什麼都無所謂被返回(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. 
    """ 
+0

是的,這對我有效......但在admin.py中,我需要重寫整個方法** response_add ** ...這是唯一的方法嗎? 我的意思是,爲什麼重定向沒有從_save_model_方法工作? – user2919162

+0

重定向沒有工作,因爲'save_model'返回'None'。它的結果並沒有在任何地方使用。並且重定向結果不是Exception,而只是Responce實例。 – oleg

+0

我明白了......好吧,問題是通過覆蓋** response_add **方法來解決 – user2919162