をクエリセット混乱する。私は以下を試してみました。Djangoは、私は3つのモデルを持っている外部キー変換
storage_list.item.all()
storage_list.item_set.all()
をクエリセット混乱する。私は以下を試してみました。Djangoは、私は3つのモデルを持っている外部キー変換
storage_list.item.all()
storage_list.item_set.all()
問題は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)
ありがとうございます。私はここで別の質問をしなければなりません、クラスストレージ内にある場合、私は 'date_added'フィールドを持っています。私はそれらのアイテムをリストに入れたいのですが、どうすればいいですか? Thx again – viviwill
次のようなものがあります: 'Item.objects.filter(storage__user = user_id).values( 'id'、 'somefield'、 'storage__date_added')'。もっと洗練された機能については、注釈/集約:https://docs.djangoproject.com/en/1.10/topics/db/aggregation/をご覧ください。 –
モデルの実際の関連部分を含めて、モデルの言い換えをしないでください。これらのオプションのいずれかが、リストではなく*インスタンス*に対して有効である可能性があります – Sayse