annotate gpp/weblinks/signals.py @ 271:4746df47a538

Follow on to last rev (r292) for #126. Missed updating a shoutbox template. Also the repoze.timeago package uses UTC time by default. Change this to local time for now until we decide to switch over to UTC for everything.
author Brian Neal <bgneal@gmail.com>
date Sun, 26 Sep 2010 17:42:00 +0000
parents 3a4bbf9c2cce
children
rev   line source
bgneal@202 1 """Signals for the weblinks application.
bgneal@202 2 We use signals to compute the denormalized category counts whenever a weblink
bgneal@202 3 is saved."""
bgneal@202 4 from django.db.models.signals import post_save
bgneal@202 5 from django.db.models.signals import post_delete
bgneal@202 6
bgneal@202 7 from weblinks.models import Category, Link
bgneal@202 8
bgneal@202 9
bgneal@202 10 def on_link_save(sender, **kwargs):
bgneal@202 11 """This function updates the count field for all categories.
bgneal@202 12 It is called whenever a link is saved via a signal.
bgneal@202 13 """
bgneal@202 14 if kwargs['created']:
bgneal@202 15 # we only have to update the parent category
bgneal@202 16 link = kwargs['instance']
bgneal@202 17 cat = link.category
bgneal@202 18 cat.count = Link.public_objects.filter(category=cat).count()
bgneal@202 19 cat.save()
bgneal@202 20 else:
bgneal@202 21 # update all categories just to be safe (an existing link could
bgneal@202 22 # have been moved from one category to another
bgneal@202 23 cats = Category.objects.all()
bgneal@202 24 for cat in cats:
bgneal@202 25 cat.count = Link.public_objects.filter(category=cat).count()
bgneal@202 26 cat.save()
bgneal@202 27
bgneal@202 28
bgneal@202 29 def on_link_delete(sender, **kwargs):
bgneal@202 30 """This function updates the count field for the link's parent
bgneal@202 31 category. It is called when a link is deleted via a signal.
bgneal@202 32 """
bgneal@202 33 # update the parent category
bgneal@202 34 link = kwargs['instance']
bgneal@202 35 cat = link.category
bgneal@202 36 cat.count = Link.public_objects.filter(category=cat).count()
bgneal@202 37 cat.save()
bgneal@202 38
bgneal@202 39
bgneal@260 40 post_save.connect(on_link_save, sender=Link, dispatch_uid='weblinks.signals')
bgneal@260 41 post_delete.connect(on_link_delete, sender=Link, dispatch_uid='weblinks.signals')