FormView:View没有返回HttpResponse对象

时间:2012-05-31 05:03:24

标签: python django django-generic-views

我知道这是因为视图的代码路径显然没有返回HttpResponse。我是django的新手,所以这可能是完全错误的。

这是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')

2 个答案:

答案 0 :(得分: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中的新视图,它们的文档与其他组件不相符;希望这会很快改变。目前,了解基于类的视图如何工作的最佳位置是查看其mixins提供的内容。

对于FormView,mixins为FormMixinProcessFormView

答案 1 :(得分:2)

您应该从postget方法返回一些内容,至少super(AddAdvertView, self).get(*args, **kwargs)。在您的代码中get刚刚创建了一个属性(尽管它应该返回一个空表单),post什么都不做(尽管它应该处理表单)。您似乎不应重新定义postget,并使用dispatch方法检索您的广告系列(不要忘记致电super(AddAdvertView, self).dispatch(dispatch arguments)