我有一个基于函数的视图,可以在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
(获取方法)?