Django 中通过模型进行多对多关系的软删除

问题描述 投票:0回答:1

我在 Django 项目中遇到一个问题,该问题与使用直通模型在多对多关系中进行软删除有关。如果您能提供有关如何解决此问题的帮助或建议,我将不胜感激。

我的应用程序中有三个模型:Author、Book 和 BookAuthor。 Author 和 Book 之间的多对多关系是通过 BookAuthor 模型定义的。以下是我的模型的定义:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=200)
    authors = models.ManyToManyField(Author, through='BookAuthor', related_name='books')

class BookAuthor(models.Model):
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    class Meta:
        # Other necessary meta definitions
        pass

当我软删除 BookAuthor 模型中的关系,然后尝试使用查询author.books.all() 访问作者的书籍时,就会出现问题。即使我已经软删除了 BookAuthor 中的关系,我仍然看到与该作者关联的所有书籍。

我正在使用 django-soft-delete 包(https://pypi.org/project/django-soft-delete/),

有人对我如何解决此问题并确保通过多对多关系访问时不显示软删除的关系有任何建议吗?

任何帮助或建议将不胜感激!预先感谢您!

python django soft-delete
1个回答
0
投票

你忘了子类化

SoftDeleteModel
,安装包没有任何作用,你需要实际使用它

引自他们的文档

class Article(SoftDeleteModel):
    title = models.CharField(max_length=100)
    
    # Following fields will be added automatically
    # is_deleted
    # deleted_at
    
    # Following managers will be added automatically
    # objects = SoftDeleteManager()
    # deleted_objects = DeletedManager()
    # global_objects = GlobalManager()
© www.soinside.com 2019 - 2024. All rights reserved.