Django restful create api отмечает новую запись как отредактированную при создании

Я работал над отслеживанием истории редактирования комментариев в своем приложении, используя django-simple-history, я смог отследить отредактированные комментарии, но только что понял, что отслеживаю записи при создании. т.е. новые записи добавляются в таблицу истории при создании.

моя модель

class Comments(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateField(auto_now=True)
    body = models.TextField(max_length=200)
    is_Child = models.BooleanField(default=False)
    author = models.ForeignKey(User, related_name='author_rel',
                               on_delete=models.CASCADE)
    article = models.ForeignKey(Article, related_name='comments',
                                on_delete=models.CASCADE, null=False)
    parent = models.ForeignKey('self', null=True, blank=True,
                               on_delete=models.CASCADE, related_name='threads')
    history = HistoricalRecords()

    def __str__(self):
        return str(self.body)

    class Meta:
        ordering = ['-created_at']

Мой класс просмотра

class CommentsListView(ListCreateAPIView):
    serializer_class = CommentSerializer
    permission_classes = (IsAuthenticatedOrReadOnly,)
    queryset = Comments.objects.all()
    renderer_classes = (CommentJSONRenderer,)

    def create(self, request, slug, *args, **kwargs):
        serializer_context = {
            'request': request,
            'article': get_object_or_404(Article, slug=self.kwargs["slug"])
        }

        article = Article.objects.filter(slug=slug).first()
        data = request.data
        serializer = self.serializer_class(
            data=data, context=serializer_context)
        serializer.is_valid(raise_exception=True)
        serializer.save(author=self.request.user, article_id=article.pk)
        return Response(serializer.data, status=status.HTTP_201_CREATED)

1 ответ

Это часть django-simple-history поведение, но вы можете удалить этот тип записей в сигнале, если вы не хотите хранить эту информацию.

from django.dispatch import receiver
from simple_history.signals import (
    post_create_historical_record
)

@receiver(post_create_historical_record)
def post_create_historical_record_callback(sender, **kwargs):
    history_instance = kwargs['history_instance']
    if history_instance.get_history_type_display() == "Created":
        history_instance.delete()
Другие вопросы по тегам