annotate weblinks/signals.py @ 821:71db8076dc3d

Bandmap WIP: geocoding integrated with add form. Add form works. Before submitting the form, client side JS makes a geocode request to Google and populates hidden lat/lon fields with the result. Successfully created a model instance on the server side. Still need to update admin dashboard, admin approval, and give out badges for adding bands to the map. Once that is done, then work on displaying the map with filtering.
author Brian Neal <bgneal@gmail.com>
date Tue, 23 Sep 2014 20:40:31 -0500
parents ee87ea74d46b
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')