Использование Ajax для изменения булева значения в модели Django с помощью кнопки

Я пытаюсь отправить сообщение в проекте Django, чтобы переключить булево значение с False на True. Кнопка работает нормально, но я хочу нажать ее без обновления страницы, поэтому я пытаюсь использовать Ajax, но я продолжаю получать {"status": "error"} для плохого запроса и не уверен почему.

Вот мнения:

def change_status(request, id):
    if request.is_ajax() and request.method == 'POST':
        startsession = Workout.objects.get(id=id)
        startsession.active = True if request.POST.get('active') == 'true' else False
        startsession.save()
        data = {'status': 'success', 'active': startsession.active}
        return JsonResponse(data, status=200)
    else:
        data = {'status': 'error'}
        return JsonResponse(data, status=400)

Вот шаблон:

        <div>
          {% if object.active %}
            <button disabled  type="button">Start the workout</button>
          {% else %}
              <a href="{% url 'my_gym:bla' object.id %}">
              <button id="customSwitches" onclick="start();" type="button">Start the workout</button>
              </a>
          {% endif %}
        </div>

Вот скрипт ajax

        <script>
                    $(document).ready(function()
                    $("#customSwitches").on('click', function () {
                      $.ajax({
                        url: "{% url 'my_gym:bla' object.id %}",
                        data: {
                          csrfmiddlewaretoken: "{{ csrf_token }}",
                          active: this.disabled
                        },
                        type: "POST",
                        dataType: 'json',

                      });
                      .done(function(data) {
                          console.log(data);
                      })
                      .always(function() {
                          console.log('[Done]');
                      })
                    })
                    });
        </script>

Ваш код на шаблоне является проблемой {% if object.active %} этот код django будет работать только при инициализации страницы. вы можете попробовать мой код ниже:

TEMPLATE:

<script> const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value; </script>

    <div id='divAppend'></div>

    $.ajax({
    url: "{% url 'YOUR URL' %}",
    type: "POST",
    data: {
      'active' : 'True or False' 
    },
    headers: { 'X-CSRFToken': csrftoken },
    success: function (data) {
      $('#divAppend').html()
      html_val=""
      
      if(data.status !== ''){
        html_val+='<button disabled  type="button">Start the workout</button>'
      }
      else{
        html_val+='<a href="{% url 'my_gym:bla' object.id %}">'
        html_val+='<button id="customSwitches" onclick="start();" type="button">Start the workout</button>'
        html_val+='</a>'
      }

      $('#divAppend').append(html_val)

    },
    error: function(){
        console.log('Error. Failed to update the details!...');
    }
  })
Вернуться на верх