2017-06-24 5 views
0

私はこのようなURLを渡したい:1,2はjavascript関数から形成されてジャンゴ(): ''

/view/people/?roles=1,2 

。私の見解では、私はこれを持っています:

roles=request.GET.get('roles',None) 
if roles: 
    roles=list(roles) 
    if type(roles) is list: 
     filter_options['role__in']=roles 

私は上記のエラーを受け取ります。私は、ハードコードの役割場合:

filter_options['role__in']=[1,2,3] 
+0

何ですか?あなたがハードコードをしていないなら、エラーは表示されませんか? – Exprator

+0

'roles = list(roles)'の後に 'roles'が保持する値を見てください。私はあなたが驚くだろうと思う。 ( '[1,2]'ではない) – Chris

+0

@Exprator no。私は正しい結果を得る。 –

答えて

0

ここでの問題は、request.GET.get('roles', None)が文字列'1,2'を返すことです。文字列は反復可能なので、反復処理(たとえばfor foo in '1,2')したり、list()を使用してリストを生成したりすると、エラーは発生しません。しかしどちらの場合でも、反復は文字列の文字を超えています。

コンマで区切られた整数だけを受け入れる場合(URLパターンなど)は、手動での文字列を','に入力し、各要素を整数に変換することができます。我々はint(role)は、URLパターンは非常に重要である理由である、ここに動作することを想定している

roles = request.GET.get('roles', None) 
if roles: 
    roles = [int(role) for role in roles.split(',')] 
    filter_options['role__in'] = roles 

注意。