2011-02-11 10 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を使ってこれを行う、その後、バックエンドに結果を送信:

uids = request.GET['ingredients'] 

I:

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の側にそれらを受け取るときであります次のエラーを取得する:

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'] 

値はユニコードであることに注意してください。ただし、整数にする必要がありますので、必ず変換してください。私のキーは実際にちょうどfoofoo[]とない理由

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

は私はわからないんだけど、あなたは何KeyErrorを取得していないとして、request.GET.getlist('ingredients')は動作するはずです。

+0

恐ろしい!これは素晴らしい作品です。 – gohnjanotis

関連する問題