Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save agusmakmun/bad0e6f4207b4a168280 to your computer and use it in GitHub Desktop.
Save agusmakmun/bad0e6f4207b4a168280 to your computer and use it in GitHub Desktop.
Filter and Count User was Joined by Date Joined
# Refference:
# https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters
# https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.extra
# http://stackoverflow.com/a/22085678/3445802
# http://stackoverflow.com/a/2283913/3445802
# http://stackoverflow.com/a/11174559/3445802
>>> from django.contrib.auth.models import User
>>> usr = User.objects.all().order_by('-date_joined')
>>> usr
[<User: gahashe21>, <User: gahashe>, <User: pqsmedia>, <User: summon>, <User: agus>, <User: agaust>]
>>>
>>> [ u.date_joined for u in usr ]
[datetime.datetime(2015, 12, 29, 16, 50, 22, 57298, tzinfo=<UTC>), datetime.datetime(2015, 12, 29, 16, 48, 37, tzinfo=<UTC>), datetime.datetime(2015, 12, 26, 11, 35, 55, 307318, tzinfo=<UTC>), datetime.datetime(2015, 12, 18, 16, 6, 22, tzinfo=<UTC>), datetime.datetime(2015, 12, 15, 11, 7, 24, tzinfo=<UTC>), datetime.datetime(2015, 12, 14, 7, 3, 43, tzinfo=<UTC>)]
>>>
>>> usr[0].date_joined.date()
datetime.date(2015, 12, 29)
>>>
>>> from django.db.models import Count
>>> User.objects.filter(pk__in=usr).values('date_joined').annotate(total=Count('pk'))
[{'total': 1, 'date_joined': datetime.datetime(2015, 12, 14, 7, 3, 43, tzinfo=<UTC>)}, {'total': 1, 'date_joined': datetime.datetime(2015, 12, 15, 11, 7, 24, tzinfo=<UTC>)}, {'total': 1, 'date_joined': datetime.datetime(2015, 12, 18, 16, 6, 22, tzinfo=<UTC>)}, {'total': 1, 'date_joined': datetime.datetime(2015, 12, 26, 11, 35, 55, 307318, tzinfo=<UTC>)}, {'total': 1, 'date_joined': datetime.datetime(2015, 12, 29, 16, 48, 37, tzinfo=<UTC>)}, {'total': 1, 'date_joined': datetime.datetime(2015, 12, 29, 16, 50, 22, 57298, tzinfo=<UTC>)}]
>>>
>>> User.objects.filter(pk__in=usr).extra({'date_joined': 'date(date_joined)'}).values('date_joined').annotate(total=Count('pk'))
[{'total': 1, 'date_joined': u'2015-12-14'}, {'total': 1, 'date_joined': u'2015-12-15'}, {'total': 1, 'date_joined': u'2015-12-18'}, {'total': 1, 'date_joined': u'2015-12-26'}, {'total': 2, 'date_joined': u'2015-12-29'}]
>>>
>>>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment