2012-08-27 5 views
7

इस क्वेरी पर विचार करें:django में, क्या एक क्वेरी में किसी संबंधित ऑब्जेक्ट के साथ सीधे एक क्वेरी को एनोटेट करने का कोई तरीका है?

query = Novel.objects.< ...some filtering... >.annotate(
    latest_chapter_id=Max("volume__chapter__id") 
) 

वास्तव में मैं क्या जरूरत है ताकि इस क्वेरी के बाद मैं टिप्पणी किए गए आईडी के आधार पर वास्तविक वस्तुओं का चयन करने के लिए किसी अन्य क्वेरी को निष्पादित करने के लिए है, अपने नवीनतम Chapter ऑब्जेक्ट वाले Novel टिप्पणी करने के लिए है। आईएमओ यह बदसूरत है। क्या उन्हें एक प्रश्न में गठबंधन करने का कोई तरीका है?

+0

क्या आप इसके बजाय उपन्यासों के साथ अध्यायों को एनोटेट कर सकते हैं? –

+0

मेरे लिए संभव नहीं लगता है, क्योंकि मुझे प्रत्येक उपन्यास के लिए केवल नवीनतम अध्याय की आवश्यकता है, लेकिन एक उपन्यास में कई अध्याय हैं, और अध्याय विभिन्न खंडों में हैं। जहां तक ​​मुझे पता है कि 'विशिष्ट()' इस मामले में बेकार है (अगर मैं गलत हूं तो मुझे सही करें), और मुझे उपन्यास से शुरू करने के अलावा बिल्कुल एक अध्याय चुनने का कोई अन्य तरीका नहीं पता है। कोई विचार? – SAPikachu

उत्तर

2

नहीं, उन्हें एक ही क्वेरी में जोड़ना संभव नहीं है।

आप दो कार्यवाही खोजने के लिए निम्नलिखित blog post पढ़ सकते हैं।

+2

रन-कागार्ड का उत्तर अब बेहतर है। – qznc

+1

लिंक की गई पोस्ट क्वेरी में अतिरिक्त() का उपयोग करने का सुझाव देती है। Django 1.8 के रूप में, अतिरिक्त() की सिफारिश नहीं की जाती है और इसे बहिष्कृत किया जाता है। – johanno

15

हां, यह संभव है।

from django.db.models.expressions import F 
from django.db.models.aggregates import Max 

Chapters.objects.annotate(last_chapter_pk=Max('novel__chapter__pk') 
      ).filter(pk=F('last_chapter_pk')) 

Django 1.7 पर परीक्षण किया गया:

एक क्वेरीसमूह सभी अध्याय जो उनके उपन्यास में पिछले रहे हैं, बस करना युक्त पाने के लिए।

संबंधित मुद्दे