Skip to content

Instantly share code, notes, and snippets.

@allieus
Last active December 14, 2015 10:18
Show Gist options
  • Save allieus/5070855 to your computer and use it in GitHub Desktop.
Save allieus/5070855 to your computer and use it in GitHub Desktop.
custom member function for Django User Model
#
# models.py
#
from django.db import models
from django.contrib.auth.models import User
def get_posts_count(self, date):
return self.post_set.filter(created_at__year = date.year,
created_at__month = date.month,
created_at__day = date.day).count()
setattr(User, 'get_posts_count', get_posts_count)
class Post(models.Model):
author = models.ForeignKey('auth.User')
created_at = models.DateTimeField(auto_now_add=True)
#
# sample.py
#
import datetime
from django.contrib.auth.models import User
date = datetime.date.today()
for user in User.objects.all():
print user.username, user.get_posts_count(date)
#
# models.py
#
from django.db import models
from django.db.models import Count
from django.contrib.auth.models import User
class Post(models.Model):
author = models.ForeignKey('auth.User')
created_at = models.DateTimeField(auto_now_add=True)
@classmethod
def get_posts_count_for_all_users(cls, date):
qs = User.objects.\
annotate(posts_count=Count('post')).\
filter(post__created_at__year = date.year,
post__created_at__month = date.month,
post__created_at__day = date.day)
for user in qs:
yield (user, user.posts_count)
#
# sample.py
#
import datetime
from django.db import connection
date = datetime.date.today()
for user, posts_count in Post.get_posts_count_for_all_users(date):
print user, posts_count
print
print '%d queries' % len(connection.queries)
print
for row in connection.queries:
print row['sql']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment