Django ответить на комментарий в ajax не работает - PullRequest
0 голосов
/ 03 мая 2020

Я пишу заявление в django 2.2 с ajax. Речь идет о разделе комментариев и ответах на комментарии. У меня две проблемы:

  1. Написание нового комментария работает. Ответ на комментарий не работает, появляется ошибка: The view spot.views.SpotDetailView didn't return an HttpResponse object. It returned None instead.

  2. Проверка - если комментарий добавлен, он работает, но ошибка появляется на всех windows для ответа к комментариям. Проверка ответа на комментарий не работает, вместо ошибки появляется источник страницы

view.py

class SpotDetail(DetailView):
    model = Spot
    context_object_name = 'spot'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = CommentModelForm()
        return context


class SpotDetailView(View):
    def get(self, request, *args, **kwargs):
        view = SpotDetail.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = SpotComment.as_view()
        return view(request, *args, **kwargs)

class SpotComment(SingleObjectMixin, FormView):
    template_name = 'spot/spot_detail.html'
    form_class = CommentModelForm
    model = Spot

    def get_success_url(self):
        return reverse('spot_detail_url', kwargs={'slug': self.object.slug, 'id': self.object.pk})

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.form_class(request.POST)
        form.instance.spot = self.object
        form.instance.author = self.request.user

        if form.is_valid():
            reply = request.POST.get('comment_id')
            comment_qs = None
            if reply:
                comment_qs = Comment.objects.get(id=reply)
                form.instance.reply = comment_qs
            form.save()

            if request.is_ajax():
                context = {
                    'form': form,
                    'errors': form.errors,
                    'object': self.object,
                }
                html = render_to_string('spot/comments.html', context, request=request)
                return JsonResponse({'form': html})
        else:
            context = {
                'form': form,
                'errors': form.errors,
                'object': self.object,
            }
            html = render_to_string('spot/comments.html', context, request=request)
            return JsonResponse({'form': html})

jQuery код:

$(document).on('submit', '.comment-form', function(event){
    event.preventDefault();
    var serialized = $('.comment-form').serialize();
    $.ajax({
        type: 'POST',
        url: $(this).attr('action'),
        data: serialized,
        dataType: 'json',
        success: function(response){
            $('.comment-section').html(response['form']);
            $('textarea').val('');
            $('.reply-btn').click(function(){
                $('.replied-comment').fadeToggle();
                $('textarea').val('');
            });
        },
        error: function(rs, e){
            console.log(rs.responseText);
        }
    });
});

$(document).on('submit', 'form[id^="reply-comment-"]', function(event){
    event.preventDefault();
    var pk = $(form[id^="reply-comment-"]).attr('value');
    var serialized = $('#reply-form' + pk).serialize();
    $.ajax({
        type: 'POST',
        url: $(this).attr('action'),
        data: serialized,
        dataType: 'json',
        success: function(response){
            $('.comment-section').html(response['form']);
            $('textarea').val('');
            $('#reply-comment-btn-' + pk).click(function(){
                $('.replied-comment').fadeToggle();
                $('textarea').val('');
            });
        },
        error: function(rs, e){
            console.log(rs);
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...