[解決済み] 異なるカテゴリから最も新しいオブジェクトを取得する Django クエリ
2023-08-17 01:30:42
質問
2つのモデル
A
と
B
. すべて
B
オブジェクトの外部キーは
A
オブジェクトへの外部キーを持ちます。のセットが与えられると
A
オブジェクトのセットがある場合、ORM を使用して、一連の
B
オブジェクトを取得する方法はありますか?
A
オブジェクトを含む。
以下は簡略化した例です。
class Bakery(models.Model):
town = models.CharField(max_length=255)
class Cake(models.Model):
bakery = models.ForeignKey(Bakery, on_delete=models.CASCADE)
baked_at = models.DateTimeField()
そこで、アメリカのAnytownにある各ベーカリーで焼かれた最も新しいケーキを返すクエリを探しています。
どのように解決するのですか?
私の知る限り、Django ORM にこれを行うワンステップの方法はありませんが、2つのクエリに分割することは可能です。
from django.db.models import Max
bakeries = Bakery.objects.annotate(
hottest_cake_baked_at=Max('cake__baked_at')
)
hottest_cakes = Cake.objects.filter(
baked_at__in=[b.hottest_cake_baked_at for b in bakeries]
)
ケーキのIDがbake_atのタイムスタンプと一緒に進行している場合、上記のコードを単純化し、曖昧さをなくすことができます(2つのケーキが同時に到着した場合、両方を取得することができます)。
from django.db.models import Max
hottest_cake_ids = Bakery.objects.annotate(
hottest_cake_id=Max('cake__id')
).values_list('hottest_cake_id', flat=True)
hottest_cakes = Cake.objects.filter(id__in=hottest_cake_ids)
ちなみに、これについては、かつて私の同様の質問に答えてくれたDaniel Rosemanに感謝します。
もし上記の方法が遅すぎるのであれば、2 番目の方法もあります - 関連するベーカリーで最もホットなケーキだけを生成するカスタム SQL を書き、それをデータベース VIEW として定義し、そのためのアンマネージド Django モデルを書くことができます。これは上記の django-users のスレッドでも言及されています。元のコンセプトへの直接のリンクはこちらです。
これが役立つといいのですが。
関連
-
[解決済み] Djangoでクエリオブジェクトを日付範囲でフィルタリングするにはどうすればよいですか?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する