Puede que esto no sea exactamente lo que estás buscando, pero podría acercarte más. Eche un vistazo a anotación de Django .
Aquí hay un ejemplo de algo que puede ayudar:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Esto le dará una lista de los modelos de sus clientes, cada uno de los cuales tendrá un nuevo atributo llamado "most_recent_purchase" y contendrá la fecha en la que realizó su última compra. El sql producido se ve así:
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"
Otra opción sería agregar una propiedad a su modelo de cliente que se vería así:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Obviamente, necesitaría manejar el caso en el que no hay compras en esta propiedad, y esto potencialmente no funcionaría muy bien (ya que estaría ejecutando una consulta para cada cliente para obtener su última compra).
He usado ambas técnicas en el pasado y ambas han funcionado bien en diferentes situaciones. Espero que esto ayude. ¡Mucha suerte!