Передача списка значений в представление 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}