我知道这是因为视图的代码路径显然没有返回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')
答案 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为FormMixin
和ProcessFormView
答案 1 :(得分:2)
您应该从post
和get
方法返回一些内容,至少super(AddAdvertView, self).get(*args, **kwargs)
。在您的代码中get
刚刚创建了一个属性(尽管它应该返回一个空表单),post
什么都不做(尽管它应该处理表单)。您似乎不应重新定义post
和get
,并使用dispatch
方法检索您的广告系列(不要忘记致电super(AddAdvertView, self).dispatch(dispatch arguments)
)