To może nie być dokładnie to, czego szukasz, ale może Cię zbliżyć. Spójrz na Adnotację Django .
Oto przykład czegoś, co może pomóc:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Spowoduje to wyświetlenie listy modeli klientów, z których każdy będzie miał nowy atrybut o nazwie „most_recent_purchase” i będzie zawierał datę ostatniego zakupu. Wytworzony sql wygląda tak:
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"
Inną opcją byłoby dodanie do modelu klienta właściwości, która wyglądałaby mniej więcej tak:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Oczywiście musiałbyś zająć się przypadkiem, w którym nie ma żadnych zakupów w tej nieruchomości, a to potencjalnie nie działałoby zbyt dobrze (ponieważ uruchamiasz jedno zapytanie dla każdego klienta, aby uzyskać jego najnowszy zakup).
Używałem obu tych technik w przeszłości i obie działały dobrze w różnych sytuacjach. Mam nadzieję, że to pomoże. Powodzenia!