Det er måske ikke lige det, du leder efter, men det kan bringe dig tættere på. Tag et kig på Djangos annotering .
Her er et eksempel på noget, der kan hjælpe:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Dette vil give dig en liste over dine kundemodeller, som hver især vil have en ny attribut kaldet "seneste_køb" og vil indeholde den dato, hvor de foretog deres sidste køb. Den producerede sql ser sådan ud:
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"
En anden mulighed ville være at tilføje en ejendom til din kundemodel, der ville se sådan ud:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Du skal naturligvis håndtere sagen, hvor der ikke er nogen køb i denne ejendom, og dette ville potentielt ikke fungere særlig godt (da du ville køre én forespørgsel for hver kunde for at få deres seneste køb).
Jeg har brugt begge disse teknikker tidligere, og de har begge fungeret fint i forskellige situationer. Jeg håber det hjælper. Held og lykke!