2011-02-11 15 views
0

我有一些代碼,當用戶登錄時,根據他先前確定的所有成分(物品)選擇適用於他的食譜。如何獲得相同格式的javascript數組和django在後端設置?

這段代碼獲得的物品的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

您正在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,但是當你沒有KeyErrorrequest.GET.getlist('ingredients')應該工作。

+0

太棒了!這很好。 – gohnjanotis 2011-02-11 02:27:09

相關問題