Как установить ajax на представление обновления на основе классов в django

На моей веб-странице есть две кнопки отправки. Одна из них предназначена для отправки формы. Другая использует ajax для отправки текста в текстовом поле на сервер, обрабатывает его и возвращает результат (в моем случае краткое содержание текста) в другое текстовое поле.

Я реализовал это с помощью ajax вызова такого вида:

$(document).on('submit','#report-text',function(e){
    e.preventDefault();
    $.ajax({
        type:'POST',
        url:'{% url "create-post" %}',
        data:
        {
            unsummarized_news : $("#id_body").val(),
            csrfmiddlewaretoken : $('input[name=csrfmiddlewaretoken]').val(),
        },
        success:function(){
            fetch('{% url "create-post" %}', {
                headers:{
                    'Accept': 'application/json',
                    'X-Requested-With': 'XMLHttpRequest', 
                },
            })
            .then(response => {
                return response.json() 
            })
            .then(data => {
                 console.log(data)
                 document.getElementById("id_title").value = data['summary'];
            })
        }
        })
    });

Вот представление, которое я использовал для создания поста, оно не только обрабатывает отправку страницы, но и обрабатывает ajax вызовы:

class CreatePost(LoginRequiredMixin, View):
    def get(self, request, *args, **kwargs):
        if request.is_ajax():
            data = {
                'summary': summary
            }
            return JsonResponse(data)
        form = PostForm()
        context = {
            'form': form,
        }
        return render(request, 'posts/create_post.html', context)

    def post(self, request, *args, **kwargs):
        if 'news_submit_form' in request.POST:
            form = PostForm(request.POST, request.FILES)
    
            if form.is_valid():
                new_post = form.save(commit=False)
                new_post.publisher = request.user
                new_post.save()
                form = PostForm() # Clearing the form after submission

        if 'unsummarized_news' in request.POST:
            global summary
            unsummarized_news = request.POST['unsummarized_news']
            summary = get_summary(unsummarized_news)

        return redirect('home')

При создании нового сообщения все работает нормально. Но моя проблема заключается в следующем: Я не могу реализовать представление, которое используется для редактирования уже отправленного сообщения. До сих пор я использовал такое представление для обработки редактирования сообщений:

class PostEdit(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['title','body','category', 'image']
    template_name = 'posts/post_edit.html'

    def get_success_url(self):
        pk = self.kwargs['pk']
        return reverse_lazy('post-detail', kwargs={'pk': pk})

    def test_func(self):
        post = self.get_object()
        return self.request.user == post.publisher

Но это представление не знает о вызове ajax, выполняемом на странице. И как только я нажимаю кнопку, которая должна выполнить вызов ajax, страница обновляется и очищает все данные формы.

Как обрабатывать вызовы ajax в представлении обновления?

Вернуться на верх