Изначально определите месяц, в котором вы хотите фильтровать.Для этого используйте функцию relativedelta
из dateutil пакет
In [33]: from datetime import datetime
In [34]: from dateutil.relativedelta import relativedelta
In [35]: months_before = 6
In [36]: now = datetime.utcnow()
In [37]: now
Out[37]: datetime.datetime(2019, 4, 8, 5, 6, 42, 300424)
In [38]: from_datetime = now - relativedelta(months=months_before)
In [39]: from_datetime
Out[39]: datetime.datetime(2018, 10, 8, 5, 6, 42, 300424)
In [40]: modified_from_datetime = from_datetime.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
In [41]: modified_from_datetime
Out[41]: datetime.datetime(2018, 10, 1, 0, 0)
Затем используйте переменную modified_from_datetime
в вашем фильтре с gte
,
PublishedRecordedActivity.objects.filter(activity_type=1, <b>timestamp_added__gte=modified_from_datetime</b>)
Полный фрагмент
from datetime import datetime
from dateutil.relativedelta import relativedelta
months_before = 6
now = datetime.utcnow()
from_datetime = now - relativedelta(months=months_before)
modified_from_datetime = from_datetime.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
PublishedRecordedActivity.objects.filter(activity_type=1, timestamp_added__gte=modified_from_datetime)
UPDATE-1
Использовать функцию группировки как,
from django.db.models.functions import TruncMonth
from django.db.models.aggregates import Count
aggregated = PublishedRecordedActivity.objects.filter(
activity_type=1).annotate(month=TruncMonth('timestamp_added')).values('month').annotate(sum_by_month=Count('month'))