Отношения "многие ко многим" не работают с 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')