Отношения "многие ко многим" не работают с django-safedelete, как я хочу

Я использую библиотеку django-safedelete, чтобы избежать постоянного удаления записей из базы данных, техника называется "safedelete". Вот документация библиотеки https://django-safedelete.readthedocs.io/en/latest/managers.html

У меня есть проблема, и она заключается в том, что когда я удаляю запись в промежуточной таблице между актером и фильмом (участие), QuerySet полностью игнорирует ее, то есть когда я выполняю запрос, чтобы узнать, в каком фильме снимался актер, Queryset игнорирует, что промежуточный регистр, связывающий актера и фильм, удален, и в любом случае показывает фильмы, в которых участвовал актер.

вот пример того, что происходит:

>>> Actor.objects.get (pk = 1)
<Actor: Actor object (1)>

>>> Film.objects.get (pk = 1)
<Film: Film object (1)>

>>> Participation.objects.all_with_deleted (). Values ​​('id', 'actor', 'film', 'deleted')
<SafeDeleteQueryset [{'id': 1, 'actor': 1, 'film': 1, 'deleted': datetime.datetime (2021, 9, 4, 0, 43, 50, 125046, tzinfo = <UTC>) }]>

>>> Actor.objects.get (pk = 1) .films.all ()
<SafeDeleteQueryset [<Film: Film object (1)>]>

Как вы можете видеть, он игнорирует, что запись об участии является softdelete и также показывает фильм, в котором участвовал актер, что мне нужно, так это не показывать, что актер участвовал в этом фильме, если участие было softdelete

Надеюсь, я хорошо объяснил свои мысли и благодарю вас.

from safedelete.config import DELETED_VISIBLE_BY_PK
from safedelete.models import SafeDeleteModel, SOFT_DELETE
from safedelete.managers import SafeDeleteManager

class ModelManager(SafeDeleteManager):
    _safedelete_visibility = DELETED_VISIBLE_BY_PK

class Film(SafeDeleteModel):
    _safedelete_policy = SOFT_DELETE
    objects = ModelManager()

    name = models.CharField(max_length=50)
    actors = models.ManyToManyField(to='movies.actor', related_name='films', through='movies.participation')

class Actor(SafeDeleteModel):
    _safedelete_policy = SOFT_DELETE
    objects = ModelManager()

    name = models.CharField(max_length=50)

class Participation(SafeDeleteModel):
    _safedelete_policy = SOFT_DELETE
    objects = ModelManager()

    main_character = models.BooleanField(default=False)
    character_name = models.CharField(max_length=50, default='')
    film = models.ForeignKey(to='movies.film', on_delete=models.CASCADE, related_name='participations')
    actor = models.ForeignKey(to='movies.actor', on_delete=models.CASCADE, related_name='participations')
Вернуться на верх