2012-04-14 17 views
21

द्वारा समूह मैं दिन तक उत्पादों को समूहबद्ध करने की कोशिश कर रहा हूं, हालांकि date_created एक डेटाटाइम फ़ील्ड है।डीजेंगो ओआरएम,

Product.objects.values('date_created') \ 
       .annotate(available=Count('available_quantity')) 

रिटर्न:

[ 
    {'date_created': datetime.datetime(2012, 4, 14, 13, 3, 6), 'available': 1}, 
    {'date_created': datetime.datetime(2012, 4, 14, 17, 12, 9), 'available': 1}, 
    ... 
] 

मैं चाहता हूँ:

[ 
    {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ... 
] 

संपादित करें: डेटाबेस बैकएंड MYSQL

+0

दिन सोमवार/मंगलवार/शादी में के रूप में की कोशिश ? –

+0

हाँ मुझे कुछ चाहिए [{'आज': 17}, {'कल': 21}, आदि] –

उत्तर

25

this question से प्रेरित होकर इस mysql के लिए

Product.objects.extra(select={'day': 'date(date_created)'}).values('day') \ 
       .annotate(available=Count('date_created')) 
+1

यह सहायक था लेकिन मुझे मान() और एनोटेट() के बीच एक स्पष्ट order_by() के साथ डिफ़ॉल्ट ऑर्डरिंग को साफ़ करना पड़ा। Https://docs.djangoproject.com/en/dev/topics/db/aggregation/#interaction-with-default-ordering-or-order-by देखें। धन्यवाद! – somecallitblues

-1

Django 1.4 में, आप .dates('date_created', 'day') बजाय .values() इस्तेमाल कर सकते हैं।

इस कोड स्निपेट का प्रयास करें:

Product.objects.annotate(available=Count('available_quantity')) \ 
    .dates('date_created', 'day') 

यह चाहिए वापसी:

[ 
    {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ... 
] 
+0

नज़दीक लगता है लेकिन मुझे केवल तारीखों के साथ एक सूची मिलती है: [डेटाटाइमटाइमटाइम (2012, 4, 10, 0 , 0), डेटाटाइम। टाइमटाइम (2012, 4, 10, 0, 0), डेटाटाइम डेटाटाइम (2012, 4, 10, 0, 0), डेटाटाइम डेटाटाइम (2012, 4, 10, 0, 0)] –

+0

.dates का उपयोग कर DateQuerySet बनाने से पहले .annotate() आज़माएं। – cfedermann

+0

मैंने कोशिश की, कोई फर्क नहीं पड़ता –

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