Django (DRF) Каналы, получающие SynchronousOnlyOperation при удалении экземпляра пользователя

Я использую DjangoRestChannels (основанный на Django Channels). Я сделал простую страницу комментариев. При добавлении нового Comment любым экземпляром User потребитель отправляет его в JS и выводит на HTML. Все работает, кроме случаев, когда экземпляр User удаляется, я получаю исключение django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.

Потребители:

class CommentConsumer(ListModelMixin, GenericAsyncAPIConsumer):
    queryset = (
        Comment.objects.filter(level=0)
        .select_related("user", "parent")
        .prefetch_related("children")
        .order_by("-date_created")
        )
    serializer_class = CommentSerializer
    permission_classes = (AllowAny, )

    @action()
    async def subscribe_to_comment_activity(self, request_id, **kwargs):
        await self.comment_activity.subscribe(request_id=request_id)

    @model_observer(Comment)
    async def comment_activity(
        self,
        message: NewCommentSerializer,
        observer=None,
        subscribing_request_ids=[],
        **kwargs
    ):
        await self.send_json(dict(message.data))

    @comment_activity.serializer
    def comment_activity(self, instance: Comment, action, **kwargs) -> NewCommentSerializer:
        """Returns the comment serializer"""
        return NewCommentSerializer(instance)

Модель:

class Comment(MPTTModel):
    """ The base model represents comment object in db. """

    user = models.ForeignKey(CustomUser, related_name="comments", on_delete=models.CASCADE)
    parent = TreeForeignKey(
        "self",
        blank=True,
        null=True,
        related_name="children",
        on_delete=models.SET_NULL
    )
    date_created = models.DateTimeField(
        verbose_name="Created at",
        auto_now_add=True,
        blank=True,
        null=True
    )
    text = models.TextField(max_length=500)

Сериализаторы:

class CommentRecusrsiveChildField(serializers.Serializer):
    """ Comment field for nested objects serialization. """
    def to_representation(self, instance):
        serializer = self.parent.parent.__class__(
            instance,
            context=self.context
        )
        serializer_data = serializer.data
        return serializer_data


class CommentSerializer(serializers.ModelSerializer):
    """ Serializes Comment model data. """

    user = BaseCustomUserSerializer()
    children = CommentRecusrsiveChildField(many=True, read_only=True)
    rate = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Comment
        exclude = ('level', 'lft', 'rght', 'tree_id')
        read_only_fields = ('date_created', 'children')

В терминале трассировка исключений мне не очень помогла, так как среди всех строк исключений мой код был только : await self.send_json(dict(message.data)) в Consumer методе async def comment_activity. Есть какие-нибудь предположения на эту тему? Буду признателен за любую помощь.

Вернуться на верх