2016-12-21 4 views
1

私はDjangoを使い始めました。私は私のquerysetを繰り返し、新しいリストにそれぞれのidと呼ばれるフィールドを追加しようとしています。Django/Pythonのリストにクエリーセットの内容を追加する

私の最終的な結果は、(例えば)このような何かを探してリストにする必要があります:私は「

my_list = [] 

for foo in bar: 
    number = foo.id 
    my_list += number 

:[1、2、3、7、10]

私のコードは次のようになりますmはこのエラーを取得:TypeError例外:「長い」オブジェクトは、反復可能ではありません

私はintにfoo.idを変更しようとしたか、STR使用している

foo.idのタイプは長いです:

number = str(number) 

も(私は、Python 2.7を使用しています)ここに解決策を試してみました:TypeError: 'long' object is not iterableが、私はこれを取得:はAttributeError:「をクエリセット」オブジェクトが無属性「iteritems」

任意の助けを持ってはるかに高く評価します!あなたのコードは、エラーが発生する理由については

+1

barとは何ですか? –

+0

@KHELILIIlyes:開始時に説明されています。「私はクエリーセットを反復しようとしています。 –

答えて

4

:あなたはmy_list.append(number)を使用する必要があると思います(my_list += anythingiterableを期待してmy_listに、この反復可能なからすべての値を追加しますmy_list.extends(anything)のショートカットです)。

さて、実際に、ここにニシキヘビの方法はすなわち、代わりにlist comprehensionを使用することです:

my_list = [foo.id for foo in bar] 

しかし、それはDjangoのクエリセットのことだから、適切なソリューションをQuerySet.values_list()を使用することです:

bar = MyModel.objects.values_list("id", flat=True) 

この結果、barはクエリーセットの「id」値に対して反復可能になります。あなたが本当にがリストを必要とする場合は、あなただけのlistコンストラクタにbarを渡す必要があります:それは、各オブジェクトのIDを取得するクエリセットを反復する悪い習慣がある

my_list = list(bar) 
0

。私は、values_list()のように使用することをお勧めします。クエリーセット内の各オブジェクトのIDのリストを表示します。

ids = bar.values_list('id', flat=True) 
関連する問題