2016-09-16 38 views
0

我跟着this discussion來實現一個過濾內容的表。在顯示的表格中,每行都有一個單元格,用戶可以點擊鏈接並編輯該行的數據。在這個過程中,使用UpdateView。使用UpdateView的success_url返回到PagedFilteredTableView

從UpdateView的表單提交時,我想返回到用於啓動連接以編輯行數據的已過濾的內容/表。

在下面我的代碼,「下一步是{}」打印所需的網址,但該框架返回一個錯誤: The view ...didn't return an HttpResponse object. It returned None instead.

我應該使用哪種功能有更新視圖返回到所需的網址是什麼?

class UpdateMyModelView(UpdateView): 
    model = MyModel 
    template_name='data_form.html' 
    fields = ['A', 'B', 'C'] 

    def form_valid(self, form): 
     instance = form.save(commit=False) 
     r = self.request 
     p = r.POST 
     print ('request is: {}'.format(r)) 
     print ('p is {}'.format(p)) 
     print ('request POST.next is: {}'.format(p['next'])) 
     self.success_url = p['next'] 
     print ('next is {}'.format(self.success_url)) 
     super(UpdateMyModelView, self).form_valid(form) 

回答

1

您的看法沒有return語句,所以它返回None。如果你打電話給super(),那麼你應該返回結果。

return super(UpdateMyModelView, self).form_valid(form) 

在這種情況下,它看起來會更好地覆蓋get_success_url而不是form_valid

def get_success_url(self): 
    return self.request.POST.get('next', '/default-url/') 
+0

謝謝!這工作。 get()爲next執行字典查找並使用某種類型的正則表達式替換default-url的值爲'next'lookup? – js07920

+0

使用'get()'可以讓你指定一個後備,如果密鑰丟失。如果你執行'request.POST ['next']',那麼如果發佈請求中缺少'next',你會得到'KeyError'。 – Alasdair