Хочу иметь возможность выполнять метод post и отображать данные в поле таблицы

в настоящее время, когда я отправляю функцию, она сначала переводит меня на страницу api, где я должен снова нажать на post, чтобы результаты обновились в базе данных, затем нажать на кнопку back и обновить страницу, чтобы увидеть обновленные данные, было бы хорошо, если бы кнопка reduce могла обновлять и отображать данные в таблице без перенаправления на страницу api. Спасибо, помогите пожалуйста. пытаюсь вывести данные здесь

@api_view(['POST'])
def sRd(request, pk):
    sw = get_object_or_404(Swimmers,id=pk)  # gets just one record
    current_sessions = sw.sessions + 10
    sw.sessions = current_sessions  # updates just the one in memory field for sw (for the one record)
    sw.save()  # you may want to do this to commit the new value
    serializer = SubSerializer(instance=sw, data=request.data)
    if serializer.is_valid():
        serializer.save()
        return JsonResponse(serializer.data, safe=False, status=status.HTTP_201_CREATED)
    return JsonResponse(data=serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)

Хотим отобразить данные на этой странице:

return render(request, 'accounts/modals/swimming/_vw_table.html', {'sw': sw})

Решением было использовать асинхронный Ajax, чтобы иметь возможность обрабатывать данные на бэкенде и отображать результаты на фронтенде, используя jQuery или любой другой фреймворк для фронтенда. Вы также должны включить токен csrf или освободить его с помощью @csrf_token, добавив плагин

from django.views.decorators.csrf import csrf_protect

<script type="text/javascript">
    // CSRF TOKEN //
    function getCookie(name) {
        let cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            const cookies = document.cookie.split(';');
            for (let i = 0; i < cookies.length; i++) {
                const cookie = cookies[i].trim();
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    const csrftoken = getCookie('csrftoken');

//Post Button Working With View Function sRd
$(document).ready(function () {
    $("#post-form").submit(function (event) {
        event.preventDefault();
        $.ajax({
            headers: {
            'Content-type':'application/json',
            'X-CSRFToken': csrftoken,
          },
            url: "{% url 'srd' srd.pk %}",
            type: "POST",
            data: $('#post-form').serialize(),
            success: function (data) {
                console.log(data);
            }
        }); // end ajax
    });
});
</script>
Вернуться на верх