これはあなたが探しているものと正確に一致しないかもしれませんが、それはあなたを近づけるかもしれません。 Djangoのアノテーション をご覧ください 。
これが役立つかもしれない何かの例です:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
これにより、顧客モデルのリストが表示されます。各モデルには「most_recent_purchase」という新しい属性があり、最後に購入した日付が含まれています。生成されるSQLは次のようになります:
SELECT "demo_customer"."id",
"demo_customer"."user_id",
MAX("demo_purchase"."date") AS "most_recent_purchase"
FROM "demo_customer"
LEFT OUTER JOIN "demo_purchase" ON ("demo_customer"."id" = "demo_purchase"."customer_id")
GROUP BY "demo_customer"."id",
"demo_customer"."user_id"
もう1つのオプションは、次のようなプロパティを顧客モデルに追加することです。
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
このプロパティに購入がない場合は、明らかに処理する必要があります。これは、パフォーマンスが低下する可能性があります(顧客ごとに1つのクエリを実行して、最新の購入を取得するため)。
私は過去にこれらの手法の両方を使用しましたが、どちらもさまざまな状況で正常に機能しました。これがお役に立てば幸いです。頑張ってください!