diff --git a/boards/signals.py b/boards/signals.py --- a/boards/signals.py +++ b/boards/signals.py @@ -23,47 +23,50 @@ THUMB_SIZES = ((200, 150),) @receiver(post_save, sender=Post) def connect_replies(instance, **kwargs): - for reply_number in re.finditer(REGEX_REPLY, instance.get_raw_text()): - post_id = reply_number.group(1) + if not kwargs['update_fields']: + for reply_number in re.finditer(REGEX_REPLY, instance.get_raw_text()): + post_id = reply_number.group(1) - try: - referenced_post = Post.objects.get(id=post_id) + try: + referenced_post = Post.objects.get(id=post_id) - if not referenced_post.referenced_posts.filter( - id=instance.id).exists(): - referenced_post.referenced_posts.add(instance) - referenced_post.last_edit_time = instance.pub_time - referenced_post.build_refmap() - referenced_post.save(update_fields=['refmap', 'last_edit_time']) - except Post.DoesNotExist: - pass + if not referenced_post.referenced_posts.filter( + id=instance.id).exists(): + referenced_post.referenced_posts.add(instance) + referenced_post.last_edit_time = instance.pub_time + referenced_post.build_refmap() + referenced_post.save(update_fields=['refmap', 'last_edit_time']) + except Post.DoesNotExist: + pass @receiver(post_save, sender=Post) @receiver(post_import_deps, sender=Post) def connect_global_replies(instance, **kwargs): - for reply_number in re.finditer(REGEX_GLOBAL_REPLY, instance.get_raw_text()): - key_type = reply_number.group(1) - key = reply_number.group(2) - local_id = reply_number.group(3) + if not kwargs['update_fields']: + for reply_number in re.finditer(REGEX_GLOBAL_REPLY, instance.get_raw_text()): + key_type = reply_number.group(1) + key = reply_number.group(2) + local_id = reply_number.group(3) - try: - global_id = GlobalId.objects.get(key_type=key_type, key=key, - local_id=local_id) - referenced_post = Post.objects.get(global_id=global_id) - referenced_post.referenced_posts.add(instance) - referenced_post.last_edit_time = instance.pub_time - referenced_post.build_refmap() - referenced_post.save(update_fields=['refmap', 'last_edit_time']) - except (GlobalId.DoesNotExist, Post.DoesNotExist): - pass + try: + global_id = GlobalId.objects.get(key_type=key_type, key=key, + local_id=local_id) + referenced_post = Post.objects.get(global_id=global_id) + referenced_post.referenced_posts.add(instance) + referenced_post.last_edit_time = instance.pub_time + referenced_post.build_refmap() + referenced_post.save(update_fields=['refmap', 'last_edit_time']) + except (GlobalId.DoesNotExist, Post.DoesNotExist): + pass @receiver(post_save, sender=Post) def connect_notifications(instance, **kwargs): - for reply_number in re.finditer(REGEX_NOTIFICATION, instance.get_raw_text()): - user_name = reply_number.group(1).lower() - Notification.objects.get_or_create(name=user_name, post=instance) + if not kwargs['update_fields']: + for reply_number in re.finditer(REGEX_NOTIFICATION, instance.get_raw_text()): + user_name = reply_number.group(1).lower() + Notification.objects.get_or_create(name=user_name, post=instance) @receiver(pre_save, sender=Post)