Tengo una vista basada en clases. Estoy usando Ajax en un modal de arranque. Para evitar la actualización de la página, quiero devolver la respuesta JSON en lugar de la respuesta HTTP con esta vista basada en clases, pero solo he visto cómo devolver la respuesta JSON para las vistas basadas en funciones.
vistas.py:
from django.contrib.auth.mixins import LoginRequiredMixin class TaskCreateView(LoginRequiredMixin, CreateView): template_name = 'create.html' form_class = TaskForm success_url = reverse_lazy('task_list') def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs.update(user=self.request.user) return kwargs
Prueba esto: funciona para mí. en realidad, debe anular el método de publicación si se apega a las vistas basadas en clases.
import json class TaskCreateView(LoginRequiredMixin, CreateView): form_class = TaskForm success_url = reverse_lazy('task_list') ... def post(self, request, **kwargs): response_data = 'your data' return HttpResponse(json.dumps(response_data),content_type="application/json")
Pruebe el código a continuación:
from django.contrib.auth.mixins import LoginRequiredMixin from django.http import JsonResponse class TaskCreateView(LoginRequiredMixin, CreateView): template_name = 'create.html' form_class = TaskForm success_url = reverse_lazy('task_list') def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs.update(user=self.request.user) return kwargs def form_valid(self, form): return JsonResponse({'foo':'bar'})