Использование 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!...');
}
})