Python FormView:View&x27;t返回HttpResponse对象

Python FormView:View&x27;t返回HttpResponse对象,python,django,django-generic-views,Python,Django,Django Generic Views,我知道这是因为视图的代码路径显然不返回HttpResponse。我是django的新手,所以这可能是完全错误的 这是FormView代码。我是否需要覆盖呈现\u到\u响应 class AddAdvertView(FormView): form_class = NewAdForm def get(self, *args, **kwargs): self.campaign = get_object_or_404(Campaign, id__exact = s

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

这是FormView代码。我是否需要覆盖
呈现\u到\u响应

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

您应该从
post
get
方法返回一些内容,至少
super(AddAdvertView,self).get(*args,**kwargs)
。在您的代码中,
get
刚刚创建了一个属性(尽管它应该返回一个空表单),而
post
什么都不做(尽管它应该处理表单)。似乎您根本不应该重新定义
post
get
,并在
dispatch
方法中检索您的活动(不要忘记调用
super(AddAdvertView,self)。dispatch(dispatch参数)

您至少应该从
post
get
方法返回一些内容(AddAdvertView,self).get(*args,**kwargs)。在您的代码中
get
刚刚创建了一个属性(虽然它应该返回一个空表单),而
post
根本不做任何事情(尽管它应该处理表单)。似乎您根本不应该重新定义
post
get
,并在
dispatch
方法中检索您的活动(不要忘记调用
super(AddAdvertView,self)。dispatch(dispatch arguments)

这可能是您在
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\u form

基于类的视图在Django中是新的,它们的文档与其他组件不相称;希望这将很快改变。现在,找出基于类的视图如何工作的最佳位置是查看它们的混合提供什么。


例如,mixin是and

这可能是您在
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\u form

基于类的视图在Django中是新的,它们的文档与其他组件不相称;希望这将很快改变。现在,找出基于类的视图如何工作的最佳位置是查看它们的混合提供什么。


例如,mixin是和

感谢您的帮助。是的,我注意到基于类的视图缺少文档。这样一个好的解决方案文档不足是非常令人沮丧的。感谢您的帮助。是的,我注意到基于类的视图缺少文档。这样一个好的解决方案是非常令人沮丧的像这样记录不足。