Isso pode não ser exatamente o que você está procurando, mas pode aproximá-lo. Dê uma olhada em anotação do Django .
Aqui está um exemplo de algo que pode ajudar:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Isso lhe dará uma lista de seus modelos de clientes, cada um dos quais terá um novo atributo chamado "most_recent_purchase" e conterá a data em que eles fizeram sua última compra. O sql produzido fica assim:
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"
Outra opção seria adicionar uma propriedade ao seu modelo de cliente que seria algo assim:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Obviamente, você precisaria lidar com o caso em que não há compras nesta propriedade, e isso potencialmente não funcionaria muito bem (já que você estaria executando uma consulta para cada cliente para obter sua última compra).
Eu usei essas duas técnicas no passado e ambas funcionaram bem em diferentes situações. Eu espero que isso ajude. Boa sorte!