1

我知道这是由于视图的代码路径显然不返回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')
4

2 回答 2

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,mixin 是FormMixinProcessFormView

于 2012-05-31T06:37:59.263 回答
2

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

于 2012-05-31T06:07:57.123 回答