Това може да не е точно това, което търсите, но може да ви доближи. Разгледайте анотацията на Django .
Ето пример за нещо, което може да помогне:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Това ще ви даде списък с моделите на вашите клиенти, всеки от които ще има нов атрибут, наречен „most_recent_purchase“ и ще съдържа датата, на която са направили последната си покупка. Полученият sql изглежда така:
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"
Друг вариант е да добавите свойство към модела на вашия клиент, което би изглеждало по следния начин:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Очевидно ще трябва да се справите със случая, когато няма никакви покупки в този имот и това потенциално няма да се представи много добре (тъй като ще изпълнявате една заявка за всеки клиент, за да получите последната си покупка).
Използвал съм и двете от тези техники в миналото и двете са работили добре в различни ситуации. Надявам се това да помогне. Успех!