2009-08-27 2 views
22

저장시 다른 앱으로 사용자를 리디렉션 할 수 있습니까?관리자 리디렉션 저장

두 개의 앱이 있습니다 (예 : app1app2). 사용자가 app2에 저장을 클릭하면 기본 페이지가 아닌 app1으로 리디렉션되어야합니다.

사용자 정의 양식을하고 싶지 않습니다.

+4

질문에 대해 답변을 제공하지 않는 이유는 무엇입니까? –

+0

어디에서 저장 하시겠습니까? 관리자의 사용자 정의 양식에서, 어디서? –

+0

은 사용자 정의 form.it이 아닌 admin에서 저장 기능을 무시합니다. – ha22109

답변

-7

데프 change_view (자기, 요청, OBJECT_ID, extra_context = 없음) :

result = super(mymodeladmin, self).change_view(request, object_id, extra_context) 

result['Location'] = "your location" 

return result 
+4

이것은 좋은 대답이 아닙니다. change_view가 성공적이지 않은 경우 어떻게됩니까? 또한 result [ 'Location']에 할당하는 것은 장고와 유사하지 않습니다 (작동 할지라도).위의 대답 (Daniel Roseman)은 좋은 답변입니다. –

+0

당신은 Roseman의 답을 검증하여 2 가지 평판을 얻으실 수 있습니다 :) stackxchange [here] (http://meta.stackoverflow.com/)를 사용하는 방법을 배울 수 있습니다. –

+0

@ 글라이드 - 유효성 검사 중 (upvoting, 나는 그것을했다). 귀하의 문서 링크가 약간 넓었습니다. –

83

관리자에서 저장 한 후 리디렉션 대상을 변경하려면 클래스에서 (새 인스턴스 추가 용) 및 response_change() (기존 변경 용)을 다시 정의해야합니다.

django.contrib.admin.options의 원본 코드를 참조하십시오.

사람들이 StackOverflow에서 계속 돕길 원한다면 질문에 대한 대답을 받아 들여야합니다.

빠른 예는이 작업을 수행하는 방법이 명확하게하기 위해 (A ModelAdmin 클래스 내 것) :

from django.core.urlresolvers import reverse 

def response_add(self, request, obj, post_url_continue=None): 
    """This makes the response after adding go to another apps changelist for some model""" 
    return HttpResponseRedirect(reverse("admin:otherappname_modelname_changelist")) 


def response_add(self, request, obj, post_url_continue=None): 
    """This makes the response go to the newly created model's change page 
    without using reverse""" 
    return HttpResponseRedirect("../%s" % obj.id]) 
+0

나는 havent에서 대답을 받아들이지 않는다고 말했습니다. 실수를 타이핑하고 수정했습니다. – ha22109

+0

조금 더 설명 할 수 있습니다. 찾을 수 없습니다 – ha22109

+9

타이핑 오류와 관련이 있습니까? StackOverflow에 대한 35 개의 질문을했으며, 단 하나의 질문에 대한 최선의 대답을 수락하지 않았습니다. 그것은 매우 나쁜 매너입니다. –

0

어쩌면 URL 네임 스페이스에 대해 살펴 ... 당신은 리디렉션 역 HttpResponseRedirect를 + 사용 아마도 수 사용자가 재정의 한 save 메소드 내부에 있습니다. 이것은 Django 1.1의 새로운 기능이며 1.0.x에서는 지원되지 않습니다.

http://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces

30

는 @ DanielRoseman의 대답에 추가하려면, 그들이 를 선택했을 때 사용자가 리디렉션하지 않을 저장 버튼이 아닌을 저장하고 계속하면 대신이 솔루션을 사용할 수 있습니다.

def response_add(self, request, obj, post_url_continue="../%s/"): 
    if '_continue' not in request.POST: 
     return HttpResponseRedirect(get_other_app_url()) 
    else: 
     return super(MyModelAdmin, self).response_add(request, obj, post_url_continue) 

def response_change(self, request, obj): 
    if '_continue' not in request.POST: 
     return HttpResponseRedirect(get_other_app_url()) 
    else: 
     return super(MyAdmin, self).response_change(request, obj) 
+0

감사합니다. 이것은 정말로 나를 도왔습니다. – nym