2012-05-31 91 views
1

我知道這是由於視圖的代碼路徑不返回HttpResponse而引起的,顯然。我是django的新手,所以這可能是完全錯誤的。FormView:查看沒有返回HttpResponse對象

這裏是FormView代碼。我是否需要覆蓋render_to_response

class AddAdvertView(FormView): 
    form_class = NewAdForm 

    def get(self, *args, **kwargs): 
      self.campaign = get_object_or_404(Campaign, id__exact = self.kwargs['campaign_id']) 

    def post(self, request, *args, **kwargs): 
      pass 

    def get_form(self, form_class): 
      return form_class(initial = {}, campaign = self.campaign) 

    def get_success_url(self): 
      return self.request.META.get('HTTP_REFERER', None) 

    def form_valid(self, form): 
      return HttpResponse('form valid') 

    def form_invalid(self, form): 
      return HttpResponse('form invalid') 

回答

5

這可能是你想要在你的get方法:

def get(self, *args, **kwargs): 
    campaign = get_object_or_404(Campaign, id=self.kwargs['campaign_id']) 
    ctx = self.get_context_data() 
    ctx['campaign'] = campaign 
    return self.render_to_response(ctx) 

如果你沒有用post做任何事情,你不應該有一個方法來覆蓋它。同樣,您不需要覆蓋get_form

基於類的視圖在django中是新的,它們的文檔不能與其他組件相提並論;希望這會很快改變。現在,瞭解基於類的視圖如何工作的最佳位置是查看它們的mixin提供的內容。

FormView,將混入有FormMixinProcessFormView

+0

感謝您的幫助。是的,我注意到基於類的視圖缺乏文檔。令人沮喪的是,這樣一個很好的解決方案沒有像這樣記錄下來。 –

2

您應該postget方法,至少super(AddAdvertView, self).get(*args, **kwargs)返回的東西。在你的代碼get剛剛創建了一個屬性(儘管它應該返回一個空的表單),並且post什麼都不做(儘管它應該處理表單)。看來你不應該重新定義postget可言,和檢索的dispatch方法運動(不要忘記調用super(AddAdvertView, self).dispatch(dispatch arguments)

相關問題