2016-11-05 10 views
2

私はDjangoを初めて使用しています。これは初めてのプロジェクトです。私は理解していない問題にぶつかりました(おそらく私は適切な検索条件を使用していません)解決策を探す際に関連する結果は見つけられません。オブジェクトの属性値を配列に追加するDjango

私のモデルの「トピック」フィールドに別個のエントリの配列を取得しようとしました。私はシェルで遊んでいました。私が期待していなかった次の結果が得られたら、これを理解しようとしました。

これは私がシェルに入力したものです:

>>> from pomodoro.models import Chunk, Result 
>>> Chunk.objects.all() 
<QuerySet [<Chunk: Onboard State Estimation>, <Chunk: Newton's 2nd Law of Motion>, <Chunk: IF>]> 
>>> a = [] 
>>> for q in Chunk.objects.all(): a += q.topic 
... 
>>> a 
['R', 'o', 'b', 'o', 't', 'i', 'c', 's', 'M', 'e', 'c', 'h', 'a', 'n', 'i', 'c', 's', 'L', 'o', 'g', 'i', 'c'] 
>>> ose = Chunk.objects.get(pk=1) 
>>> ose.topic 
'Robotics' 

私は個々の文字ではなく、「話題」文字列の配列の配列になってしまった理由を私は理解していません。誰かがなぜこれが起こったのか説明できますか?

私がやろうとしていることをもっとうまくやっていることも知っていますが、初心者ではDjangoを適切に把握していません。その理由は、その文字列オブジェクトが反復可能であり、Pythonはあなたのリストに項目を追加するために反復処理するようです

a += [q.topic] 

+1

'a + = q.topic'ではなく' a.append(q.topic) 'です。または 'a + = [q.topic]' – slackmart

+0

それは意味があります、ありがとう – Era

答えて

1

ではなくa += q.topic

a.append(q.topic) 

かのappendメソッドを使用してみてください。したがって、'Robotics'を反復すると、['R', 'o', 'b', 'o', 't', 'i', 'c', 's']となります。

[q.topic]という単一のリスト値を指定した場合、Pythonはforループ内の各繰り返しに対してq.topicという値を追加します。

関連する問題