Order モデルと order_event モデルがあります。各 order_event には、注文する外部キーがあります。したがって、注文インスタンスから取得できます: myorder.order_event_set
. すべての注文のリストを取得したいのですが、最後のイベントの日付で並べ替えたいです。次のようなステートメントは、最新のイベント日付でソートします。
queryset = Order.objects.all().annotate(
latest_event_date=Max('order_event__event_datetime')
).order_by('latest_event_date')
しかし、私が本当に必要としているのは、A SUBSET OF EVENTS の最新の日付でソートされたすべての注文のリストです。たとえば、私のイベントは「スケジューリング」、「処理」などに分類されているため、最新のスケジューリング イベントでソートされたすべての注文のリストを取得できるはずです。この django doc (https://docs.djangoproject.com/en/dev/topics/db/aggregation/#filter-and-exclude) は、フィルターを使用して最新のスケジュール イベントを取得する方法を示していますが、これはスケジュールのない注文を除外しますイベント。
フィルタリングされたクエリセットを、スケジュール イベントが欠落している注文を戻すクエリセットと組み合わせることができると考えましたが、これを行う方法がよくわかりません。Python リストの使用に関連する回答を見ましたが、適切な django クエリセット (つまり、ページネーションを含むビューなど) を使用する方がはるかに便利です。
再編集: コメント/提案
class Order(models.Model):
desc = models.CharField(max_length=30)
class Order_event(models.Model):
order = models.ForeignKey(Order)
event_datetime = models.DateTimeField(auto_now_add = True)
また、複数のステートメントで実行してもかまいません。また、私は巨大なデータセットを扱っていないので、orm の代わりに python を介してソートなどを行っても問題ありません。可能であれば、あなたが言及した理由から、SQLから離れたいと思います。別々の並べ替えられたクエリセットを組み合わせることは有望に思えますが、私は立ち往生しています。