हो सकता है कि यह ठीक वैसा न हो जैसा आप ढूंढ रहे हैं, लेकिन यह आपको और करीब ले जा सकता है। Django's annotate पर एक नज़र डालें .
यहां कुछ ऐसा उदाहरण दिया गया है जो मदद कर सकता है:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
यह आपको आपके ग्राहक मॉडल की एक सूची देगा, जिनमें से प्रत्येक में "most_recent_purchase" नामक एक नई विशेषता होगी और इसमें वह तिथि होगी जिस दिन उन्होंने अपनी पिछली खरीदारी की थी। उत्पादित एसक्यूएल इस तरह दिखता है:
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]
आपको स्पष्ट रूप से उस मामले को संभालने की आवश्यकता होगी जहां इस संपत्ति में कोई खरीद नहीं है, और यह संभावित रूप से बहुत अच्छा प्रदर्शन नहीं करेगा (क्योंकि आप प्रत्येक ग्राहक के लिए उनकी नवीनतम खरीदारी प्राप्त करने के लिए एक प्रश्न चला रहे होंगे)।
मैंने अतीत में इन दोनों तकनीकों का उपयोग किया है और इन दोनों ने अलग-अलग स्थितियों में ठीक काम किया है। आशा है कि ये आपकी मदद करेगा। शुभकामनाएँ!