Передача параметра от js до django - PullRequest
1 голос
/ 12 февраля 2020

У меня есть функция в views.py

def time(request): 
    date = Registration.objects.filter(date_visit=date_use)
    time_list=[]
    for a in date:
        time_list.append(date.time_visit)
    return JsonResponse({'time_list':time_list})

Я хочу передать туда параметр date_use из моего поля в форме.

Я вычисляю значения поля следующим образом

$(document).ready(function() {
  $('.pole').change('input', function() {
     var val = $(this).val();
  });
});

Как передать значение val в date_use?

1 Ответ

0 голосов
/ 12 февраля 2020

Вы можете использовать клавишу data в запросе JS ajax для передачи параметров в запросах get и post.

Примечание. При отправке форм с использованием Django вам нужно захватить csrf token и установить его в качестве заголовка X-CSRFToken. Вы можете использовать следующий код, предоставленный в Django самих Документах, здесь .

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var 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;
}
  $('.pole').change('input', function() {
     var datetime = $(this).val();
     var cookie = getCookie('csrftoken')
       $.ajax({
           url: '/your-url/',
           headers: {'X-CSRFToken': cookie},
           type: 'get', // can be 'post' as well or anything else you'd want such as 'put', 'patch', etc'
           data: {'datetime': datetime},
           success: function(e){
             console.log(e)
           },
           error: function(e){
                console.log(e);
           }
       })    
  });

views.py

def time(request): 
    if request.method == "GET":
        date = Registration.objects.filter(date_visit=date_use)
        # you can get the value from the JS using the `key` in `data` attribute of `ajax request`
        data_from_form = request.GET.get('datetime')

        # if you have multiple inputs coming your way for example if there's a list of inputs you're getting you can use 
        data_from_form = request.GET.getlist('datetime')
        time_list=[]
        for a in date:
            time_list.append(date.time_visit)
        return JsonResponse({'time_list':time_list})

Примечание. Возможно, вам придется использовать ajax request на нескольких страницах, копирование и вставка функции getCookie на каждой странице очень контрпродуктивно. Вместо этого вы можете вставить этот код в новый файл с именем utils.js и импортировать этот файл в base.html. Имейте в виду, что импортное позиционирование для utils.js. Если вам нужно использовать функции внутри него в другом скрипте, вам нужно импортировать этот конкретный скрипт ниже utils.js

base. html

{% load static %}
<html>
<head>
</head>
<body>

<script src="{% static '/js/utils.js' %}" type='text/javascript'></script>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...