Метод 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,
- Идентификация нового экземпляра модели в Django Save с UUID pk
- В пользовательском методе сохранения() модели django, как следует идентифицировать новый объект? .
Я понимаю, что мне может понадобиться использовать 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')