2011-02-06 2 views
5

제출할 때 성공 페이지로 리디렉션되는 간단한 양식이 있습니다.django - POST 후 리디렉션 할 때 정보 전달

내 성공 페이지에서 이전 단계에서 제출 한 데이터를 사용할 수 있기를 원합니다.

내가 아는 한 리다이렉션 할 때 POST 데이터를 전달할 수 없으므로 어떻게해야합니까?

현재로서는 동일한 URL에서 성공 페이지를 직접 반환해야하지만 새로 고칠 때 데이터 재발행이 두려워집니다.

request.session 유일한 방법은 무엇입니까? ?

+0

(이 당신을 위해 무엇을 물어 결국이기 때문에) 당신이 할 것입니다 요청 사이의 데이터를 유지 할 수 있도록 모든 메커니즘. 세션은 아마도 가장 단순하지만 분명히 유일한 방법은 아닙니다. –

답변

7

당신은 할 수 있습니다 : - [ID]

  1. 데이터 (전체 데이터 또는 객체 그냥 ID 중 하나) request.session의 URL에 뭔가 같은 ID = [ID]와
  2. 리디렉션 전달 개체를 가리 킵니다.

업데이트 : 태평양 표준시에 관한

. 1 위, 난 당신이 (POST 처리기에서) 할 수 있다는 것을 의미 :

my_object = MyModel.objects.create(...) 
request.session['my_object_id'] = my_object.id 

을하거나 전체 개체를 전달 시도해 볼 수도 있습니다 (이 작업을해야하지만 100 % 확신하지 않다) :

my_object = MyModel.objects.create(...) 
request.session['my_object'] = my_object 
+0

당신은 누구를 언급하고 있습니까? 평가할 수있는 POST 데이터가있는 어딘가에 개체가 있습니까? – Acorn

+0

예, 이름이 request.POST.data –

+0

인데 리디렉션하면 페이지에서 POST 데이터에 액세스 할 수 없습니까? – Acorn

8

나는 세션 객체가 필요없이 항상이 작업을 수행한다. 매우 일반적인 패턴 POST-redirect-GET입니다. 일반적으로 내가 할 것은 :

  1. 그 형태에 성공적으로 게시
  2. 데이터를 저장하고 객체 자세히보기

에 대한 리디렉션을 생성하고 데이터를 게시하는 개체의 목록과 양식 전망을 이렇게하면 POST 후 저장하고 저장 한 후 리디렉션합니다. thingies의 모델을 가정

예보기 :

def all_thingies(request, **kwargs): 
    if request.POST: 
     form = ThingieForm(request.POST) 
     if form.is_valid(): 
      thingie = form.save() 
      return HttpResponseRedirect(thingie.get_absolute_url()) 
    else: 
     form = ThingieForm() 
    return object_list(request, 
         queryset = Thingie.objects.all().order_by('-id'), 
         template_name = 'app/thingie-list.html', 
         extra_context = { 'form': form }, 
         paginate_by = 10) 
+0

+1 : 도토리가 개체 세부 정보 페이지로 리디렉션하려고 할 수도 있습니다 .-) –

+0

문제는 내 페이지가 데이터베이스에 제출하지 않고 보내는 중입니다. 인터넷으로 메시지가 전달되므로 리디렉션 할 관련 페이지가 없습니다. – Acorn

+0

@Acorn 글쎄, 저장 대신 보내기 및 질문에 언급 된 succes 페이지로 리디렉션 –