Хочу иметь возможность выполнять метод 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>