0

User モデルへの ForeignKey を持つモデル Foo があります。

後で、すべてのユーザーの ID を取得してリストに追加する必要があります

foos = Foo.objects.filter(...)

l = [ f.user.id for f in foos ]

しかし、私がそうすると、django は、各 Foo 行に存在する数値ユーザー ID だけを提供する代わりに、DB から User インスタンス全体を取得します。

各ユーザーにクエリを実行したり、select_related を使用したりせずに、すべての ID を取得するにはどうすればよいですか?

ありがとう

4

3 に答える 3

5

queryset の values() 関数を使用すると、パラメーターとして渡された各属性の名前と値のペアを含む辞書のリストが返されます。

>>> Foo.objects.all().values('user__id')
[{'user__id': 1}, {'user__id' 2}, {'user__id': 3}]

ORM は、「SELECT *」を実行する代わりに、必要なフィールドのみを返すように SQL クエリを最適化できます。

于 2009-01-25T00:41:14.867 に答える
3

Django で ForeignKey を定義すると、モデルに FIELD_id フィールドが自動的に追加されます。

たとえば、 に" " という名前の属性Fooを持つ FK がある場合、関連するユーザーの ID を含むuser_idという名前の属性もあります。Useruser

l = [ f.user_id for f in foos ]

属性を賢く選択すれば、呼び出し.values()もパフォーマンスを向上させます

于 2009-01-28T05:11:17.887 に答える
0

気にしないでください...以前に試したときにこれが機能しなかった理由はわかりませんが、これを行う方法は次のとおりです。

l = [ f.user_id for f in foos ]
于 2009-01-24T22:41:20.383 に答える