Как получить такой же формат для массива javascript и django, установленных на бэкэнде? - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть код, который, когда пользователь входит в систему, выбирает рецепты, которые применяются к нему, на основе ингредиентов (предметов), которые он ранее идентифицировал как идентифицированные как имущество.

Этот код получает идентификаторы предметову пользователя уже есть:

if request.user.is_authenticated():
    user_items = [possession.item for possession in request.user.possession_set.all()]
    user_items_ids = [item.id for item in user_items]
    uids = set(user_items_ids)

Следующий код, который уже существовал, - это место, где я сталкиваюсь с проблемами ...

recipes = [(recipe, len(set([item.id for item in recipe.items.all()]) & uids), recipe.votes) for recipe in recipes]

Я создал еще одну часть сайта, которая позволяет людямкоторые еще не подписались, чтобы просто выбрать несколько ингредиентов.Я делаю это с помощью jQuery на внешнем интерфейсе, а затем отправляю результаты на сервер:

var ingredient_set = [];
$('.temp_ingredient').each(function(index){
ingredient_set[index] = $(this).attr('id').substr(4);
});

$.get('/recipes/discover', { 'ingredients': ingredient_set }, 
function(){
    alert("Success");
});

Проблема заключается в том, что я получаю их на стороне Django с этим кодом:

uids = request.GET['ingredients']

Я получаю следующую ошибку:

unsupported operand type(s) for &: 'set' and 'unicode'

По сути, я знаю, что они не в том же формате, но я не знаю, как заставить их быть совместимыми.

1 Ответ

1 голос
/ 11 февраля 2011

Вы отправляете массив JavaScript в строке запроса вашего запроса GET. Поэтому вы должны использовать request.GET.getlist . Простое использование request.GET[key] дает вам последнее значение для этого ключа.

>> request.GET['foo[]']
u'5'
>> request.GET.getlist('foo[]')
[u'1', u'2', u'4', u'5']

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

uids = request.GET.getlist('foo[]')
uids = set([int(x) for x in uids])

Я не уверен, почему мой ключ на самом деле foo[], а не просто foo, но, как вы понимаете, KeyError, request.GET.getlist('ingredients') не должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...