Как вернуть ответ JSON в представлениях на основе классов вместо ответа HTTP - PullRequest
1 голос
/ 08 января 2020

У меня есть представление на основе классов. Я использую Ajax на модале bootstrap. Чтобы избежать ссылки на страницу sh, я хочу вернуть ответ JSON вместо ответа HTTP с этим представлением на основе классов, но я только видел, как вернуть JSON ответ для представлений на основе функций.

views.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

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Попробуйте код ниже:

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'})
1 голос
/ 08 января 2020

Попробуйте это: работает для меня. на самом деле вы должны переопределить метод post, если вы придерживаетесь основанных на классах представлений.

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")
...