Det här kanske inte är exakt vad du letar efter, men det kan komma dig närmare. Ta en titt på Djangos anteckning .
Här är ett exempel på något som kan hjälpa:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Detta kommer att ge dig en lista över dina kundmodeller som var och en kommer att ha ett nytt attribut som kallas "senaste_köp" och kommer att innehålla det datum då de gjorde sitt senaste köp. Den skapade sql ser ut så här:
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"
Ett annat alternativ skulle vara att lägga till en egenskap till din kundmodell som skulle se ut ungefär så här:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Du skulle uppenbarligen behöva hantera fallet där det inte finns några köp i den här fastigheten, och detta skulle potentiellt inte fungera särskilt bra (eftersom du skulle köra en fråga för varje kund för att få sitt senaste köp).
Jag har använt båda dessa tekniker tidigare och de har båda fungerat bra i olika situationer. Jag hoppas det här hjälper. Lycka till!