2012-03-09 13 views
9

का उपयोग करके दिन भर डीजेगो मॉडल प्रविष्टियों को समूहीकृत करना मैं प्रकाशन की तारीख (pub_date) को कैप्चर करने के लिए डेटटाइमफ़िल्ल्ड (auto_now_add = True) मॉडल के साथ एक लेख के साथ काम कर रहा हूं।अपने डेटाटाइम फ़ील्ड

मैं एक प्रश्न मायने रखता है कि कितने लेख पोस्ट या प्रविष्टियों प्रतिदिन जोड़ दिया गया है क्या करना चाहते हैं: यह निम्नलिखित की तरह कुछ लग रहा है। दूसरे शब्दों में, मैं प्रविष्टियों से पूछता हूं और उन्हें दिन (और अंततः महीना, घंटा, दूसरा, आदि) समूहबद्ध करना चाहता हूं। यह SQLite शेल में निम्न कुछ ऐसा दिखाई देगा:

select pub_date, count(id) from "myapp_article" 
where id = 1 
group by strftime("%d", pub_date) 
; 

कौन सा की तरह कुछ देता है:

2012-03-07 18:08:57.456761|5 
2012-03-08 18:08:57.456761|9 
2012-03-09 18:08:57.456761|1 

मैं यह पता लगाने की कैसे एक Django क्वेरीसमूह से कि परिणाम प्राप्त नहीं कर पा रहे। मुझे पता है कि a similar result using itertools.groupby कैसे प्राप्त करें, लेकिन इस स्थिति में यह संभव नहीं है (अनुसरण करने के लिए स्पष्टीकरण)।

इस क्वेरी का अंतिम परिणाम एक ग्राफ में उपयोग किया जाएगा जो प्रति दिन पोस्ट की संख्या दिखाता है। मैं इस लक्ष्य को प्राप्त करने के लिए Django Chartit पैकेज का उपयोग करने का प्रयास कर रहा हूं। चार्टिट डेटा स्रोत (डेटापूल) पर बाधा डालता है। स्रोत मॉडल, प्रबंधक या क्वेरीसेट होना चाहिए, इसलिए itertools.groupby का उपयोग करना एक विकल्प नहीं है जहां तक ​​मैं कह सकता हूं।

तो सवाल यह है कि ... मैं दिन तक प्रविष्टियों को समूहबद्ध या समूहीकृत कैसे करूं और क्वेरीरी ऑब्जेक्ट के साथ समाप्त करूं?

उत्तर

31

एक अतिरिक्त क्षेत्र बनाएं कि केवल दुकान तारीख डेटा (नहीं समय) और गणना के साथ उनकी व्याख्या:

Article.objects.extra({'published':"date(pub_date)"}).values('published').annotate(count=Count('id')) 

परिणाम होगा:

published,count 
2012-03-07,5 
2012-03-08,9 
2012-03-09,1 
+0

क्या हम सभी प्रविष्टियों अलग से प्राप्त करना चाहते हैं, तो एक ही क्वेरी में प्रत्येक pub_date के लिए गिनती? –

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