python - Django aggregation query on related one-to-many objects -


यहाँ मेरा सरलीकृत मॉडल है:

  वर्ग आइटम (models.Model): पास वर्ग TrackingPoint (models.Model): item = models.ForeignKey (आइटम) बनाया = models.DateField () डेटा = models.IntegerField () वर्ग मेटा: unique_together = ('आइटम', 'बनाया')  

मेरे आवेदन के कई हिस्सों में मुझे आइटम के एक सेट को पुनः प्राप्त करने की जरूरत है और डेटा फ़ील्ड से नवीनतम TrackingPoint > प्रत्येक आइटम से बनाया फ़ील्ड द्वारा आदेश दिया गया उदाहरण के लिए, उदाहरण i1 वर्ग आइटम में 3 TrackingPoint 's:

  tp1 = TrackingPoint (आइटम = I1, बनाया = दिनांक (2010,5,15), डेटा = 23) टीपी 2 = ट्रैकिंग पॉइंट (आइटम = i1, बनाया = तिथि (2010,5,14), डेटा = 21) टीपीई = ट्रैकिंग पॉइंट (आइटम = आई 1, बनाया गया  i1  को  tp1.data  के साथ एनोटेट करने के लिए मुझे एक क्वेरी की ज़रूरत है = तिथि (2010,5,12), डेटा = 120)  

कोड> फ़ील्ड मान tp1 के रूप में निर्मित फ़ील्ड द्वारा क्रमबद्ध नवीनतम ट्रैकिंग बिंदु है। उस क्वेरी को आइटम की वापसी भी करनी चाहिए, जिसमें कोई भी TrackingPoint नहीं है यदि संभव हो तो मैं ऐसा करने के लिए QuerySet के अतिरिक्त विधि का उपयोग नहीं करना चाहता हूं।

यही मैंने अब तक की कोशिश की ... और असफल :(

  आइटम। ऑब्जेक्ट्स.अनोटेट (अधिकतम_कैटेड = मैक्स ('ट्रैकिंग प्वाइंट डॉट्सटेड'), डेटा = औसत ('ट्रैकिंग प्वाइंटडीएडेटा'))। फ़िल्टर (ट्रैकिंगपॉइंटमेंट = एनकोडेड = एफ ('मैक्स_किरेटेड'))  

कोई भी विचार?

यहाँ एक एकल क्वेरी है जो प्रदान करेगा (TrackingPoint, Item ) - पेयर:

<प्री> ट्रैकिंग पॉइंट.ओबैज। एनोटेट (मैक्स = मैक्स ('आइटम__ट्रैकिंगपॉइंट डूबेटेड'))। फिल्टर (अधिकतम = एफ ('बनाया'))। चयन_संबंधित ('आइटम')। ('बनाया')

आपको ट्रैकिंग पॉइंट के बिना आइटम के लिए अलग से क्वेरी करना होगा।


Comments