Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在后端为javascript数组和django集获取相同的格式?_Javascript_Jquery_Django_Json_Django Views - Fatal编程技术网

如何在后端为javascript数组和django集获取相同的格式?

如何在后端为javascript数组和django集获取相同的格式?,javascript,jquery,django,json,django-views,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 = s

我有一个代码,当用户登录时,会根据他以前确定为拥有的成分(项目)选择适用于他的配方

此代码获取用户已经拥有的项目的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'

基本上,我知道它们的格式不同,但我不知道如何使它们兼容。

您正在get请求的查询字符串中发送JavaScript数组。因此,您应该使用。只需使用
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('components')
时,它应该会起作用