如何为后端设置的javascript数组和django设置相同的格式?

时间:2011-02-11 00:09:56

标签: javascript jquery django json django-views

我有一些代码,当用户登录时,根据他之前确定为财产的成分(项目)选择适用于他的食谱。

此代码获取用户已拥有的项目的ID:

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 个答案:

答案 0 :(得分:1)

您正在GET请求的查询字符串中发送JavaScript数组。因此,您应该使用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')应该有效。