Django AJAX Request Only Получение последнего элемента (не проблема getlist) - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать систему тегов в Django.В основном, я передаю список тегов (флажки в форме) через AJAX в представление Django, которое обновит список тегов новым выбором соответствующих тегов в httpresponse.

Проблема в том, чтоDjango, похоже, получает последний элемент списка самостоятельно, даже после getlist.Фактически, если я печатаю весь запрос. GET, он показывает только один элемент в каждом списке.

Код javascript / jQuery находится здесь:

    $(document).on('change', '.form-check-input',function () {

    var all_tags = $("input:checkbox").map(function() { return this.id; }).get();
    var selected_tags = $("input:checkbox:checked").map(function() { return this.id; }).get();

    alert(all_tags);
    alert(selected_tags);

    $.ajax({
        url: "{% url 'AJAX_tagFilter' %}",
        data: { 'all_tags': all_tags, 'selected_tags': selected_tags },
        cache: false,
        type: 'GET',
        success: function (data) {
            alert(selected_tags);
            $('#test').html(data);
            console.log('success');
        }
    });

});

И я сделал паруоповещения, чтобы я мог видеть, что передается правильно на каждом этапе.Я вижу все теги, которые ожидаю.

12,13,21,16,17,15,11,7,18
12,13

Но когда он попадает в представление Django:

def getTagFilterSidebar(request):

if 'selected_tags[]' in request.GET:
    all_tags = request.GET.getlist("all_tags[]")
    selected_tags = request.GET.getlist("selected_tags[]")

    debug_text4 = str(request.GET)

Я не вижу список тегов.Это вывод:

<QueryDict: {'_': ['1539460657253'], 'all_tags[]': ['18'], 'selected_tags[]': ['13']}>

Критическая часть этого заключается в том, что на моем локальном сервере он работает нормально.Тем не менее, я использую Zappa и загрузил его в AWS.Это только на AWS, что это не работает правильно.Так что я немного озадачен тем, что происходит.Я бы очень признателен за помощь, спасибо!

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Проблема в том, что jQuery сериализует массив, используя дублированные параметры запроса, что Amazon API Gateway (используется Zappa) не поддерживает .

Или нет,Я должен сказать.Всего несколько дней назад Amazon объявил, что API Gateway теперь будет поддерживать это :

Начиная с сегодняшнего дня, Amazon API Gateway поддерживает несколько заголовков и параметров строки запроса с одним и тем же именем в API.Запрос.

В любом случае, как вы обнаружили, вы можете просто реализовать собственную сериализацию, которая не требует дублирования параметров запроса.

0 голосов
/ 14 октября 2018

В соответствии с предложением Даниэля Роземана:

Вместо передачи списка я использовал функцию соединения двух переменных в строку, обозначенную запятой:

var all_tags = $("input:checkbox").map(function() { return this.id; }).get();
var selected_tags = $("input:checkbox:checked").map(function() { return this.id; }).get();

Оттуда я использовалфункция разделения в Django, чтобы полностью изменить процесс:

all_tags = request.GET.getlist("all_tags")[0].split(",")

Не самый прямой способ решения проблемы, но быстрый и легкий.

...