2017-02-23 33 views
0

をクエリセット混乱する。私は以下を試してみました。Djangoは、私は3つのモデルを持っている外部キー変換

storage_list.item.all() 
storage_list.item_set.all() 
+1

モデルの実際の関連部分を含めて、モデルの言い換えをしないでください。これらのオプションのいずれかが、リストではなく*インスタンス*に対して有効である可能性があります – Sayse

答えて

1

問題はstorage_listがリストに変換されていることです。 .item_set.all()メソッドは、リスト内の実際のオブジェクトに対してのみ有効です。

私が使用しようとする基本的なルール:あなたが望むものを求めます。あなたの場合、実際にはストレージオブジェクトではなく、アイテムを持っていたいと思っています。だからこのようなもの:

Item.objects.filter(storage__user__id=user_id) 

So:ストレージオブジェクトを介してユーザーと接続されているアイテム。 Djangoはこれを適切なSQL結合に変換します。

ユーザーには__idを実行する必要はありません。デフォルトでdjangoが主キーを参照するので、その部分を省略することができます。したがって:

Item.objects.filter(storage__user=user_id) 
+0

ありがとうございます。私はここで別の質問をしなければなりません、クラスストレージ内にある場合、私は 'date_added'フィールドを持っています。私はそれらのアイテムをリストに入れたいのですが、どうすればいいですか? Thx again – viviwill

+1

次のようなものがあります: 'Item.objects.filter(storage__user = user_id).values( 'id'、 'somefield'、 'storage__date_added')'。もっと洗練された機能については、注釈/集約:https://docs.djangoproject.com/en/1.10/topics/db/aggregation/をご覧ください。 –

関連する問題