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 @@ -276,13 +276,15 @@ class Post(models.Model, Viewable): def save(self, force_insert=False, force_update=False, using=None, update_fields=None): + new_post = self.id is None + self._text_rendered = Parser().parse(self.get_raw_text()) self.uid = str(uuid.uuid4()) if update_fields is not None and 'uid' not in update_fields: update_fields += ['uid'] - if self.id: + if not new_post: for thread in self.get_threads().all(): thread.last_edit_time = self.last_edit_time @@ -290,6 +292,13 @@ class Post(models.Model, Viewable): super().save(force_insert, force_update, using, update_fields) + # Post save triggers + if new_post: + self.build_url() + + self._connect_replies() + self._connect_notifications() + def get_text(self) -> str: return self._text_rendered @@ -307,12 +316,12 @@ class Post(models.Model, Viewable): else: return str(self.id) - def connect_notifications(self): + def _connect_notifications(self): for reply_number in re.finditer(REGEX_NOTIFICATION, self.get_raw_text()): user_name = reply_number.group(1).lower() Notification.objects.get_or_create(name=user_name, post=self) - def connect_replies(self): + def _connect_replies(self): """ Connects replies to a post to show them as a reflink map """ diff --git a/boards/models/post/manager.py b/boards/models/post/manager.py --- a/boards/models/post/manager.py +++ b/boards/models/post/manager.py @@ -85,10 +85,7 @@ class PostManager(models.Manager): else: post.attachments.add(Attachment.objects.create_with_hash(file)) - post.build_url() - post.connect_replies() post.connect_threads(opening_posts) - post.connect_notifications() # Thread needs to be bumped only when the post is already created if not new_thread: