django - 多对多关系不适用于我想要的 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)>]>
如您所见,它忽略了参与记录是软删除,并且还显示了演员参与的电影,如果参与是软删除,我需要的是不显示演员参与了该电影
我希望我已经很好地解释了自己,谢谢。
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')
解决方案
推荐阅读
- django - 如何在 Django 中增加会话内部?
- javascript - API 显示 [object, Object] 而不仅仅是事实文本
- python - 范围和 for 循环
- python - TensorFlow“接收到混合的批处理和非批处理张量,或者张量与规格不兼容”
- docker - 未知速记标志:-aq 中的“a”
- python - MS Edge (Chromium) - 无法使用 Selenium WebDriver
- javascript - 带有 WAI-ARIA 的可折叠部分:附加“隐藏”按钮?
- vega-lite - Vega-Lite - 在时间轴上跳过周末(非工作日)
- reactjs - 如何将 JSX 设置为变量以便优化代码?
- react-native - 在 react-native-video selectedVideoTrack 道具中不起作用