Метод save() для модели django_comments_xtd

Я использую Wagtail + Django_comments_xtd + Django.

My_Django_App/models.py

from wagtail.core.models import Page
class PostPage(Page):
  ...


from django_comments_xtd.models import XtdComment
class PostComment(XtdComment):
    page = ParentalKey('PostPage', on_delete=models.CASCADE, related_name='rn_comments')

    def save(self, *args, **kwargs):
        if self.user:
            self.user_name = self.user.username
        self.page = PostDetail.objects.get(pk=self.object_pk)
        super(PostComment, self).save(*args, **kwargs)

В Wagtail CMS, если я пересматриваю существующее сообщение, к которому уже есть несколько комментариев, и снова публикую отредактированное сообщение, я думал, что PostComment.save() больше не должен срабатывать. Однако во время отладки я обнаружил, что он срабатывает неожиданно.

Я полагаю, что мне нужно точно настроить PostComment.save() для достижения вышеуказанного намерения.

После некоторых исследований на StackOverflow,

Я понимаю, что мне может понадобиться использовать PostComment._state.adding и force_insert внутри save() для достижения моего намерения.

Может ли кто-нибудь показать мне, как я должен точно настроить PostComment.save()?

Мне удалось разобраться с этим самостоятельно. Я использовал ParentalKey для связи PostComment модели с моделью страницы трясогузки PostPage.

class PostComment(XtdComment):
    # page = ParentalKey('PostPage', on_delete=models.CASCADE, related_name='rn_comments')

Из-за того, как работает modelcluster (откуда происходит ParentalKey), каждый раз, когда PostPage пересматривается и переиздается, PostComment.save() будет срабатывать

После того, как я изменил ParentalKey на models.ForeignKey, PostComment.save() больше не срабатывает после того, как PostPage был пересмотрен и повторно опубликован.

class PostComment(XtdComment):
    # page = models.ForeignKey('PostPage', on_delete=models.CASCADE, related_name='rn_comments')
Вернуться на верх