Možná to není přesně to, co hledáte, ale může vás to přiblížit. Podívejte se na Djangovu anotaci .
Zde je příklad něčeho, co může pomoci:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Získáte tak seznam modelů vašich zákazníků, z nichž každý bude mít nový atribut nazvaný „most_recent_purchase“ a bude obsahovat datum, kdy provedli svůj poslední nákup. Vytvořený sql vypadá takto:
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"
Další možností by bylo přidání vlastnosti do vašeho modelu zákazníka, která by vypadala nějak takto:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Zjevně byste museli řešit případ, kdy v této službě nejsou žádné nákupy, a to by potenciálně nefungovalo příliš dobře (protože byste spustili jeden dotaz pro každého zákazníka, abyste získali jeho nejnovější nákup).
V minulosti jsem používal obě tyto techniky a obě fungovaly dobře v různých situacích. Doufám, že to pomůže. Hodně štěstí!