Передача списка значений в представление django с помощью вызова jQuery ajax

Я пытаюсь передать список числовых значений (идентификаторов) с одной веб-страницы на другую с помощью вызова jQuery ajax. Я не могу понять, как передать и прочитать все значения в списке. Я могу успешно опубликовать и прочитать 1 значение, но не несколько значений. Вот что у меня так далеко:

JQuery:

var postUrl = "http://localhost:8000/ingredients/";
$('li').click(function(){
    values = [1, 2];
    $.ajax({
        url: postUrl,
        type: 'POST',
        data: {'terid': values},
        traditional: true,
        dataType: 'html',
        success: function(result){
            $('#ingredients').append(result);
            }
    });       
});

/ ингредиенты / вид:

def ingredients(request):
    if request.is_ajax():
        ourid = request.POST.get('terid', False)
        ingredients = Ingredience.objects.filter(food__id__in=ourid)
        t = get_template('ingredients.html')
        html = t.render(Context({'ingredients': ingredients,}))
        return HttpResponse(html)
    else:
        html = '<p>This is not ajax</p>'      
        return HttpResponse(html)

В Firebug я вижу, что POST содержит оба идентификатора, но, вероятно, в неправильном формате (terid=1&terid=2). Так что мой вид ингредиентов поднимает только terid=2. Что я делаю неправильно?

РЕДАКТИРОВАТЬ: Чтобы уточнить, мне нужно передать значения переменной ourid [1, 2] в фильтр в представлении ингредиентов.

5 ответов

Решение

Я нашел решение моей первоначальной проблемы. Размещение здесь в качестве ответа, надеюсь, это кому-нибудь поможет.

JQuery:

var postUrl = "http://localhost:8000/ingredients/";
$('li').click(function(){
    values = [1, 2];
    var jsonText = JSON.stringify(values);
    $.ajax({
        url: postUrl,
        type: 'POST',
        data: jsonText,
        traditional: true,
        dataType: 'html',
        success: function(result){
            $('#ingredients').append(result);
            }
    });       
});

/ ингредиенты / вид:

def ingredients(request):
    if request.is_ajax():
        ourid = json.loads(request.raw_post_data)
        ingredients = Ingredience.objects.filter(food__id__in=ourid)
        t = get_template('ingredients.html')
        html = t.render(Context({'ingredients': ingredients,}))
        return HttpResponse(html)
    else:
        html = '<p>This is not ajax</p>'      
        return HttpResponse(html)

Вы можете получить доступ к этому массиву с помощью request.POST.getlist('terid[]') в представлении

в JavaScript:

$.post(postUrl, {terid: values}, function(response){
    alert(response);
});

в view.py:

request.POST.getlist('terid[]')

Это прекрасно работает для меня.

Эта часть ваша проблема:

ourid = request.POST.get('terid', False)
ingredients = Ingredience.objects.filter(food__id__in=ourid)

Вам необходимо десериализовать строку JSON.

import json
ourid = json.loads(request.POST.get('terid'))

Кажется, вы устанавливаете массив в строку здесь

data: {'terid': values},

Так должно быть

data: {terid: values}

Попробуйте отправить данные так:

   data: values;
Другие вопросы по тегам