将基于函数的视图转换为基于类的视图以返回JSON响应

时间:2018-02-18 19:29:55

标签: python django django-forms

我有一个基于函数的视图,可以在Bootstrap Modal对话框中正常工作并返回JSON响应。我正在尝试使用CreateView实现此功能,但无法使其正常工作。

基于功能的视图,工作正常: -

def task_create(request):
    form = CreateTaskForm(initial={'owner' : request.user,
                               'assignee' :  request.user})
    context = {'form': form}
    html_form = render_to_string('tasks/task_create_ajax.html',
        context,
        request=request)
    return JsonResponse({'html_form': html_form})

尝试基于班级的观点: -

class CreateTaskView(LoginRequiredMixin, CreateView):
   form_class = CreateTaskForm

   def get_template_names(self):
      if self.request.is_ajax():
        return ['tasks/task_create_ajax.html']
      else:
        return ['tasks/createtask.html']

   def get_form_kwargs(self):
      kwargs = super(CreateTaskView, self).get_form_kwargs()
      kwargs.update({'initial': {'owner' : self.request.user,
                               'assignee' : self.request.user}})
      return kwargs

   def form_invalid(self, form):
     response = super(CreateTaskView,self).form_invalid(form)
     if self.request.is_ajax():
        return JsonResponse(form.errors, status=400)
     else:
        return response

   def form_valid(self, form):
     response = super(CreateTaskView, self).form_valid(form)
     if self.request.is_ajax():
        print(form.cleaned_data)
        data = {
            'message': "Successfully submitted form data."
        }
        return JsonResponse(data)
     else:
        return response

问题: -

在基于函数的视图中,html表单通过变量html_form传递,我可以使用console.dump命令在浏览器中查看/调试。当我使用基于类的视图时,我的表单没有填充。

有人可以建议什么是正确的方法,使其适用于基于类的视图?如何使用JsonResponse

传递表单的CreateView(获取方法)?

0 个答案:

没有答案