問題タブ [django-select-related]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
7203 参照

django - django: select_related と entry_set

entry_set を select_related でキャッシュする必要がありますか? select_related を使用した後でも、DB はまだ呼び出しを受けています。関連セクション

そして、最初に大きな結合クエリが表示され、その後、各成果に対する個々の呼び出しが表示されます。ポイントと名前検索の両方。

これはバグですか、それとも何か間違っていますか?

0 投票する
3 に答える
596 参照

python - select_related()の後でさえDjangoがMySQLにヒットしますか?

かなり小さなDjangoアプリからのデータベース呼び出しを最適化しようとしています。現在、私はいくつかのモデルを持っています、InquiryそしてInquiryStatus。MySQLからすべてのレコードを選択するとJOIN、2つのテーブルに適切なステートメントが表示され、その後にInquiryStatusテーブルへの多くのリクエストが続きます。すでに行っているのに、Djangoがまだ個別のリクエストを行っているのはなぜselect_related()ですか?

モデルは次のようになります。

デバッグのために一緒に投げたビューは次のようになります。

を変更せずに使ってみましたselect_related(depth=1)。データベースへの無関係な要求のそれぞれはidWHERE句で特定の1つを選択しています。

アップデート:

したがって、モデルに含める必要のある非常に重要なコードが1つありました。

その結果、fullhistory(私が理解できない理由で)個々の結果を取得して解析しました。

0 投票する
2 に答える
24888 参照

python - Django:select_related with ManyToManyField

私は持っています :

Aliasすべてのデータが事前achiever_setawards入力されているものを作成するにはどうすればよいですか?

エイリアスがすでに取得しているアワード(中間テーブルとアワード自体の両方)に多くのアクセスが必要になります。これらすべてをバッチ処理するにはどうすればよいですか?

0 投票する
1 に答える
16488 参照

django - Django ORM - 外部キーを使用した select_related および order_by

アーティスト、リリース、トラック、ソングという単純な音楽スキーマがあります。最初の 3 つはすべて論理構造であり、4 番目 (Song) は mp3、wav、ogg などの特定の (アーティスト、リリース、トラック) インスタンスです。

データベース内の曲の順序付きリストを生成するのに問題があります。問題は、 と の両方Trackに. whileは常にパフォーマー名ですが、コンピレーションの場合はパフォーマー名または「Various Artists」のいずれかになります。どちらかでソートできるようにしたいのですが、これを機能させる正しい方法がわかりません。ReleaseArtistSong.Track.ArtistSong.Track.Release.Artist

ここに私のスキーマがあります:

私のクエリはかなり単純なはずです。特定のユーザーが所有するすべての曲をフィルタリングしてから、Song.Track.Artist.nameまたはで並べ替えますSong.Track.Release.Artist.name。ビュー内のコードは次のとおりです。並べ替えは次のSong.Track.Artist.nameとおりです。

order_by使わないと仕事にならないtblname.colname。基礎となるクエリオブジェクトのas_sqlメソッドを調べました。これは、内部結合がこの同じテーブルで既に取得のために行われているためSong.Track.Release.Artist、一時的な名前を取得するために内部結合が行われるときにテーブルT6に使用されることを示しています:ArtistSong.Track.Artist

これをテーブル名として入れるorder_byと機能しますが (上記の出力例を参照)、これは完全に移植性がないようです。確かにこれを行うより良い方法があります! 私は何が欠けていますか?

0 投票する
3 に答える
1511 参照

python - モデルの関連オブジェクトとモデルの子の関連オブジェクトの総数を取得するにはどうすればよいですか?

Djangoには、誰かが機器をチェックアウトするためのチケットであるCheckoutモデルがあります。チェックアウトの担当者はキャンパスのOrganizationalUnitに属しているため、Checkoutモデルが(ForeignKeyを介して)関連するOrganizationalUnitモデルもあります。

OrganizationalUnitには自己関係があるため、複数のOUを特定のOUの子にしたり、それらの子に子を持たせたりすることができます。これがモデルですが、多少簡略化されています。

特定のOrganizationalUnitとそのすべての子に関連するチェックアウトの数を取得したいと思います。OUに関連するすべてのチェックアウトの数を取得する方法を知っています。

しかし、このカウントにこのOUの子とその子のチェックアウトを反映させるにはどうすればよいですか?ある種の反復ループを使用しますか?


編集:これを行うためのwhileコマンドに頭を包むことはまだできないと思います。組織単位は、ユーザーがネストしたいだけ深くすることができますが、現在、DBで最も深くなるのは5です。私はこれを書きました…</p>

…これは完全ながらくたです。また、データベースの主要なチャンクをほぼ通過するため、実行には時間がかかります。ヘルプ!(今日はよく考えられないようです。)

0 投票する
4 に答える
12026 参照

django - Djangoの左外側の逆select_related?

次のモデルを想像してください。

子供を持つ親もいれば、子供を持たない親もいます (本当の意味での親ではなく、架空の名前です)。

次のクエリを作成したいと思います。すべての Parentsを一覧表示し、子供がいる場合は子供も連れてきてください。これは、子テーブルへの左外部結合と同等です。つまり、次のようになります。

このようにして、テンプレートでParent.child_setを呼び出すときに、データベースに何億回もアクセスすることはありません。それを行う方法はありますか?ありがとう

0 投票する
1 に答える
177 参照

django - Django との厳しい関係

このモデルを見てください (これは仮説です)。

私がクエリしたいのは、車とそのメーカーのマネージャーのリスト (質問では重要ではないいくつかの条件が与えられた場合)、およびそれらの都市です。これは、次のコードで何とか行うことができます。

私が欲しいのは、メーカーの車をマネージャーごとに辞書にリストすることです。ただし、このコードは明らかに、データベース内の車と同じ数のクエリを実行します。

一度にすべてのインスタンスを選択するにはどうすればよいですか?

0 投票する
1 に答える
603 参照

sql - Django: 変更リストに多対多のフィールドを表示する

Django は、正当な理由により、変更リスト内の多対多の関係からの関連オブジェクトの表示をサポートしていません。これにより、多くのデータベース ヒットが発生します。

しかし、オブジェクトと多対多の関係にあるオブジェクトのカテゴリをチェンジリストに表示するなど、避けられず必要な場合もあります。その場合、これを少しスピードアップするための経験/スニペットなどを持っている人はいますか(キャッシング、カスタムSQLクエリを考えています...)? (私は呼び出すメソッドを作成できるという事実を認識していますobject.categories.all()...しかし、これは本当にお尻の痛みになる可能性があります...)。

0 投票する
2 に答える
3146 参照

django - Select_related() クエリセットからのデータの使用に関するヘルプが必要

私は部品データベースに取り組んでいます。ここでは、すべての部品番号をアセンブリにすることもできます。つまり、任意の数の他の部品で構成されています (さらにループを続けることができ、サブ部品はさらに多くの部品で構成されています)。そのため、2 つのデータベース テーブルがあり、1 つは部品情報用で、もう 1 つは関係情報 (「サブ部品」番号にリンクされた部品番号) 用です。「アセンブリ」、「パーツ」、および「サブパーツ」はすべて、最終的には単なる「パーツ」であることに注意してください (ちょっと混乱しますが、より DRY で汎用性の高いデータベースが可能になります)。

現在、select_related 呼び出しを使用して、モデルで使用されている ForeignKeys を追跡しています。ただし、私のクエリは 1 つ以上の結果を返す可能性があるため (複数のサブパーツの場合)、"get" ルックアップを使用できず、代わりに "filter" を使用しています。そのため、すべて get クエリに基づいているドキュメントに示されている例に従うことはできません。

select_related クエリは、意図したものを取得しているようです (DjangoDebugToolbar によって表示される生の SQL クエリに基づいて)。でも、呼び方がわからない!関連するテーブルの値を表示するための正しい構文または方法は何ですか? 返されたクエリセット内のすべてのインスタンスをループするにはどうすればよいですか? 以下のテンプレートのスニペットは、結果として取得しようとしているものを最も効果的に示しているはずです。ありがとう。

助けてくれてありがとう

0 投票する
1 に答える
3352 参照

python - Django では、`select_related()` によってクエリされているオブジェクトの `defer()` フィールドを使用できますか?

私のDjangoアプリでは、フィールドを「フォロー」するために使用select_related()したいのですが、「フォロー」モデルインスタンスのいくつかのフィールドにアクセスするだけで済みます。「フォローされた」フィールドで何らかの方法でメソッドを使用できますか。QuerySetForeignKeydefer()

たとえば、私が持っている場合...

...そして、私はフィールドをFooModel.objects.all().select_related('bar')どのようにできるかをやっています。defer()blah

ありがとう。