# HG changeset patch # User neko259 # Date 2016-06-04 17:01:10 # Node ID 9c0a2b699559d02be0aba6979e2e9127f2c7343c # Parent 5e3e9d010c7f8fbc62fefd0e3c8221c5068539aa Rebuild refmap after post from it was deleted diff --git a/boards/models/post/__init__.py b/boards/models/post/__init__.py --- a/boards/models/post/__init__.py +++ b/boards/models/post/__init__.py @@ -116,14 +116,19 @@ class Post(models.Model, Viewable): return title - def build_refmap(self) -> None: + def build_refmap(self, excluded_ids=None) -> None: """ Builds a replies map string from replies list. This is a cache to stop the server from recalculating the map on every post show. """ - post_urls = [refpost.get_link_view() - for refpost in self.referenced_posts.all()] + replies = self.referenced_posts + if excluded_ids is not None: + replies = replies.exclude(id__in=excluded_ids) + else: + replies = replies.all() + + post_urls = [refpost.get_link_view() for refpost in replies] self.refmap = ', '.join(post_urls) diff --git a/boards/signals.py b/boards/signals.py --- a/boards/signals.py +++ b/boards/signals.py @@ -106,3 +106,10 @@ def generate_thumb(instance, **kwargs): if not thumb_name == thumb_name_: raise ValueError( 'There is already a file named %s' % thumb_name_) + + +@receiver(pre_delete, sender=Post) +def rebuild_refmap(instance, **kwargs): + for referenced_post in instance.refposts.all(): + referenced_post.build_refmap(excluded_ids=[instance.id]) + referenced_post.save(update_fields=['refmap'])