class TruncMonth(expression, output_field=None, tzinfo=None, **extra)
[source]
-
kind = 'month'
These are logically equivalent to Trunc('date_field', kind)
. They truncate all parts of the date up to kind
which allows grouping or filtering dates with less precision. expression
can have an output_field
of either DateField
or DateTimeField
.
Since DateField
s don’t have a time component, only Trunc
subclasses that deal with date-parts can be used with DateField
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | >>> from datetime import datetime >>> from django.db.models import Count >>> from django.db.models.functions import TruncMonth, TruncYear >>> from django.utils import timezone >>> start1 = datetime( 2014 , 6 , 15 , 14 , 30 , 50 , 321 , tzinfo = timezone.utc) >>> start2 = datetime( 2015 , 6 , 15 , 14 , 40 , 2 , 123 , tzinfo = timezone.utc) >>> start3 = datetime( 2015 , 12 , 31 , 17 , 5 , 27 , 999 , tzinfo = timezone.utc) >>> Experiment.objects.create(start_datetime = start1, start_date = start1.date()) >>> Experiment.objects.create(start_datetime = start2, start_date = start2.date()) >>> Experiment.objects.create(start_datetime = start3, start_date = start3.date()) >>> experiments_per_year = Experiment.objects.annotate( ... year = TruncYear( 'start_date' )).values( 'year' ).annotate( ... experiments = Count( 'id' )) >>> for exp in experiments_per_year: ... print (exp[ 'year' ], exp[ 'experiments' ]) ... 2014 - 01 - 01 1 2015 - 01 - 01 2 >>> import pytz >>> melb = pytz.timezone( 'Australia/Melbourne' ) >>> experiments_per_month = Experiment.objects.annotate( ... month = TruncMonth( 'start_datetime' , tzinfo = melb)).values( 'month' ).annotate( ... experiments = Count( 'id' )) >>> for exp in experiments_per_month: ... print (exp[ 'month' ], exp[ 'experiments' ]) ... 2015 - 06 - 01 00 : 00 : 00 + 10 : 00 1 2016 - 01 - 01 00 : 00 : 00 + 11 : 00 1 2014 - 06 - 01 00 : 00 : 00 + 10 : 00 1 |
Please login to continue.