Django: ajax не возвращает и не отправляет данные в django

Я создаю простую кнопку like с помощью ajax, я следовал руководству, но кажется, что я что-то упускаю, я не получаю никаких ошибок ни в консоли, ни в терминале django, но когда я нажимаю на кнопку, никакие данные не отправляются, все остается по-прежнему, и это не то, чего я ожидал, я знаю, что где-то что-то упускаю, и я не могу сказать, откуда берется эта ошибка.

views.py

@login_required
def like(request):
    if request.POST.get("action") == 'post':
        result = ""
        id = int(request.POST.get('courseid'))
        course = get_object_or_404(Course, id=id)

        if course.like.filter(id=request.user.id).exists():
            course.like.remove(request.user)
            course.like_count -= 1
            result = course.like_count
            course.save()
        else:
            course.like.add(request.user)
            course.like_count += 1
            result = course.like_count
            course.save()
        return JsonResponse({'result': result})

urls.py ПРИМЕЧАНИЕ:Я не знаю, нужен ли мне slug в этом пути url

    path('like/', views.like, name="like"),

base.html

   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

course-detail.html

<li><button id="like-button" value="{{course.id}}">like</button><span id="like-count">{{course.llke_count}}</span></li>



<script type="text/javascript">
        
    $(document).on("click", '#like-button', function(e){
        e.preventDefault()
        $.ajax({
            type: 'POST',
            url: '{% url 'course:like' course.slug %}',
            data: {
                courseid: $('#like-button').val(),
                csrfmiddlewaretoken: $("input[name=csrfmiddlewaretoken]").val(),
                action: 'post'
            },
            success: function(json){
                document.getElementById("like-count").innerHTML = json['result']
                console.log(json)
            },
            error: function (xhr, errmsg, err)
            console.log(xhr)
            console.log(errmsg)
            console.log(err)
        })
    })

</script>

это весь код, который я написал для функциональности, если есть что-то еще, что нужно предоставить, я обновлю вопрос

Обновите ваш код следующим образом, и я сомневаюсь в вашей таблице типа таблицы, предоставьте это в вашем вопросе.

внутри вашего views.py

@login_required
def like(request):
    if request.method == 'POST':
        result = ""
        course_id = int(request.POST.get('courseid'))
        course = get_object_or_404(Course, id=course_id)

        if course.like.filter(id=request.user.id).exists():
            course.like.remove(request.user)
            course.like_count -= 1
            result = course.like_count
            course.save()
        else:
            course.like.add(request.user)
            course.like_count += 1
            result = course.like_count
            course.save()
        return JsonResponse({'result': result})

внутри вашего course-detail.html

<script type="text/javascript">

    $("#like-button").on("click", function (e) {
        e.preventDefault()
        $.ajax({
            type: 'POST',
            url: "{% url 'course:like' %}",
            data: {
                courseid: $('#like-button').val(),
                csrfmiddlewaretoken: "{{ csrf_token }}",
            },
            success: function (json) {
                document.getElementById("like-count").innerHTML = json['result']
                console.log(json)
            },
            error: function (xhr, errmsg, err) {
                console.log(xhr)
                console.log(errmsg)
                console.log(err)
            }

        })
    })

</script>

Примечание :

  1. Вам не нужно проверять действие, вместо этого вы можете проверить метод, например request.method.
  2. Вы предоставили неправильный url внутри вашего ajax вызова '{% url 'course:like' course.slug %}' он должен быть '{% url 'course:like' %}' без передачи slug.
  3. Не используйте id в качестве переменной, потому что это будет конфликтовать с функцией python id(), вы можете проверить все доступные встроенные функции в python здесь.
Вернуться на верх