Dit is misschien niet precies wat je zoekt, maar het kan je dichterbij brengen. Bekijk Django's annotatie .
Hier is een voorbeeld van iets dat kan helpen:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Dit geeft u een lijst van uw klantmodellen die elk een nieuw kenmerk hebben met de naam "meest_recente_aankoop" en de datum bevatten waarop ze hun laatste aankoop hebben gedaan. De geproduceerde sql ziet er als volgt uit:
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"
Een andere optie is het toevoegen van een eigenschap aan uw klantmodel die er ongeveer zo uitziet:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
U zou natuurlijk het geval moeten behandelen waarin er geen aankopen zijn in dit eigendom, en dit zou mogelijk niet erg goed presteren (aangezien u één zoekopdracht voor elke klant zou uitvoeren om hun laatste aankoop te krijgen).
Ik heb beide technieken in het verleden gebruikt en ze hebben allebei goed gewerkt in verschillende situaties. Ik hoop dat dit helpt. Veel succes!