Как установить 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 в представлении обновления?