tags:

views:

25

answers:

2

Hello,

I have a very basic model:

class Link(models.Model):
    title = models.CharField(max_length=250, null=False)
    user = models.ForeignKey(User)
    url = models.CharField(max_length=250, blank=True, null=True)
    link_count = models.IntegerField(default=0)
    pub_date = models.DateField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

I can create a list of all the entries grouped by date using:

Link.objects.values('pub_date').order_by('-pub_date').annotate(dcount=Count('pub_date'))

This will naturally group items by day. But what I really want to do is group by month. Is there anyway I can do this using annotate()?

Many thanks,

G

+1  A: 

If you're on PostgreSQL, the following might work:

Link.objects.extra(select={'month': 'extract( month from pub_date )'}).values('month').annotate(dcount=Count('pub_date'))

I'm not sure how portable extract is across other databases.

ars
Thanks! This does seem to work for mySQL also. Except this groups all months across any year. I am trying to get grouped months for each year. But this is a great start so I'll tweak. Thanks again.
givp