2011-02-06 37 views
5

Tôi có một biểu mẫu đơn giản, khi được gửi chuyển hướng đến trang thành công.django - chuyển thông tin khi chuyển hướng sau POST

Tôi muốn có thể sử dụng dữ liệu đã được gửi ở bước trước, trong trang thành công của tôi.

Theo như tôi biết, bạn không thể chuyển dữ liệu POST khi chuyển hướng, vậy làm cách nào để bạn đạt được điều này?

Hiện tại tôi phải trực tiếp trả lại trang thành công từ cùng một URL, nhưng điều này làm cho việc gửi lại dữ liệu đáng sợ khi được làm mới.

Đang sử dụng request.session cách duy nhất để đi?

+0

Bất kỳ cơ chế cho phép bạn kiên trì dữ liệu giữa các yêu cầu sẽ làm gì (vì đây là cuối cùng những gì bạn yêu cầu). Phiên có lẽ là đơn giản nhất, nhưng chắc chắn không phải là cách duy nhất. –

Trả lời

7

Bạn có thể:

  1. Vượt qua dữ liệu (hoặc dữ liệu đầy đủ hay chỉ id để phản đối) trong request.session
  2. Redirect với một cái gì đó giống như id = [id] trong URL - nơi [id]? trỏ đến đối tượng của bạn.

Cập nhật:

Về pt. 1 ở trên, tôi đồng nghĩa với việc bạn có thể làm (trong handler POST):

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

Hoặc bạn có thể thử qua toàn bộ đối tượng (nó cũng làm việc nhưng tôi không phải là chắc chắn 100%):

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

Bạn đang đề cập đến đối tượng nào? Có một đối tượng nào đó chứa dữ liệu POST có thể được đánh giá không? – Acorn

+0

Có, tên là request.POST.data –

+0

Nhưng khi tôi chuyển hướng, trang sẽ không có quyền truy cập vào dữ liệu POST? – Acorn

8

Tôi làm điều này mọi lúc, không cần đối tượng phiên. Nó là một mẫu rất phổ biến POST-redirect-GET. Điển hình là những gì tôi làm là:

  1. Có một cái nhìn với danh sách đối tượng và một hình thức để gửi dữ liệu
  2. gửi bài thành công hình thức mà tiết kiệm dữ liệu và tạo ra một chuyển hướng đến xem chi tiết đối tượng

Bằng cách này, bạn lưu khi POST và chuyển hướng sau khi lưu.

An xem ví dụ, giả sử một mô hình của 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: Tôi đã không tìm ra rằng Acorn có thể chỉ muốn chuyển hướng đến trang chi tiết đối tượng :-) –

+0

Vấn đề là trang của tôi không gửi cơ sở dữ liệu nhắn tin vào internet, vì vậy không có trang liên quan để tôi chuyển hướng đến. – Acorn

+0

@Acorn Vâng, thay vì lưu làm việc gửi, và sau đó chuyển hướng đến trang succes bạn đã đề cập trong câu hỏi của bạn –

Các vấn đề liên quan