( अपडेट : पूर्ण ओआरएम एकत्रीकरण समर्थन अब Django 1.1 में शामिल है । निजी APIs का उपयोग करने के बारे में नीचे दी गई चेतावनी के लिए सही है। यहाँ प्रलेखित विधि अब Django के 1.1 संस्करण के बाद के संस्करणों में काम नहीं करती है। मैंने यह पता लगाने के लिए खोदा नहीं है; यदि आप 1.1 पर हैं या बाद में आपको वास्तविक एकत्रीकरण एपीआई का उपयोग करना चाहिए ।)
कोर एकत्रीकरण समर्थन पहले से ही 1.0 में था; यह अभी तक अविभाजित, असमर्थित है, और इसके ऊपर अभी तक एक अनुकूल एपीआई नहीं है। लेकिन यहाँ है कि आप इसे 1.1 आने तक वैसे भी उपयोग कर सकते हैं (अपने जोखिम पर, और पूरी जानकारी में कि query.group_by विशेषता सार्वजनिक API का हिस्सा नहीं है और बदल सकती है):
query_set = Item.objects.extra(select={'count': 'count(1)'},
order_by=['-count']).values('count', 'category')
query_set.query.group_by = ['category_id']
यदि आप फिर क्वेरी_सेट पर पुनरावृति करते हैं, तो प्रत्येक लौटाया गया मान "श्रेणी" कुंजी और "गणना" कुंजी के साथ एक शब्दकोश होगा।
आपको यहां ऑर्डर करने की आवश्यकता नहीं है, यह सिर्फ यह प्रदर्शित करने के लिए शामिल है कि यह कैसे किया जाता है (इसे .xtra () कॉल में किया जाना चाहिए, क्वेरी कंस्ट्रक्शन चेन में कहीं और नहीं)। इसके अलावा, आप गिनती (1) के बजाय सिर्फ काउंट (आईडी) कह सकते हैं, लेकिन बाद वाला अधिक कुशल हो सकता है।
यह भी ध्यान दें कि जब .query.group_by को सेट किया जाता है, तो मान वास्तविक DB स्तंभ नाम ('श्रेणी_आईडी') होना चाहिए न कि Django फ़ील्ड नाम ('श्रेणी')। इसका कारण यह है कि आप क्वेरी इंटर्नल्स को ऐसे स्तर पर ट्विक कर रहे हैं जहां सब कुछ DB शब्दों में है, न कि Django के शब्दों में।