django软删除不级联删除

2024-06-10

我在 django 管理中使用软删除,就像this http://codespatter.com/2009/07/01/django-model-manager-soft-delete-how-to-customize-admin/。 问题是,当我删除外键项目时,它似乎不会触发其链接到的所有项目的删除。或者也许它确实如此,但它没有运行自定义默认删除我的模型上有。

-如果我删除一个人,那么他们会被软删除,但相关帐户不会受到影响。

-如果我删除软删除,那么当我删除一个人时,帐户也会被删除,这是正确的。

因此,理想情况下,当我删除一个人时,我希望它软删除该人,并且引用该人的帐户也被软删除(将它们标记为非活动状态)。

class Person(models.Model):
    description = models.CharField(max_length=100)

    def delete(self, *args, **kwargs):
        self.active = False
        self.deleted_date = datetime.now()
        self.save()

class Account(models.Model):
    name = models.CharField(max_length=50)
    person = models.ForeignKey(Person, null=True, blank=True)
    active = models.BooleanField(default=True, editable=False)

    objects = SoftDeleteManager()

    def delete(self, *args, **kwargs):
        self.active = False
        self.deleted_date = datetime.now()
        self.save()

    def __unicode__(self):
        return "%s: %s" % (self.type,self.name)

UPDATE:我已经更新了问题。我没有说过我正在对 Person 模型运行软删除。还补充说,当 def 删除未被覆盖时,级联删除可以工作,但是当我覆盖删除时,级联不会触发。


Your Person模型当前不是为“软”删除而设计的。当您删除一个Person对象,Django将删除所有相关的Account对象。如果你想软删除Person对象,为其添加一个标志Person模型。然后你需要确保你的默认Accountmanager 排除那些与软删除的 Person 对象相关的帐户。

Edit:

  1. 一种方法是让默认管理器排除与非活动 Person 对象相关的对象,而不是将它们设置为“已删除”:

      class AccountManager(models.Manager): 
          def get_query_set(self):
              return self.filter(person__active=True).filter(active=True)
    
  2. 另一种方法是在软删除 Person 对象时将相关 Account 对象设置为“删除”。为此,您可以使用信号。 A保存后信号 https://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.post_save我认为在 Person 对象上是合适的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django软删除不级联删除 的相关文章

随机推荐

  • 使用邮递员发送cookie

    我阅读了用邮递员用cookie发送请求的手册 由于打包的应用程序与浏览器分开运行在沙箱中 因此 无法访问浏览器内设置的cookie 这个限制可以 也可以使用拦截器扩展来克服 邮递员路由所有 通过拦截器请求 然后拦截器使用浏览器上下文 发送请
  • 使用输入管道时如何替换 feed_dict?

    假设您有一个已与feed dict到目前为止将数据注入到图表中 每隔几个时期 我就会通过将任一数据集的一批数据输入到我的图表中来评估训练和测试损失 现在 出于性能原因 我决定使用输入管道 看看这个虚拟示例 import tensorflow
  • 如何在 Laravel 中动态更改 .env 文件中的变量?

    我想创建一个 Laravel Web 应用程序 允许管理员用户使用 Web 后端系统更改 env 文件中的某些变量 例如数据库凭据 但如何保存更改呢 没有内置的方法可以做到这一点 如果您确实想更改其中的内容 env文件 您必须结合 PHP
  • 从 pandoc LaTex 输出中删除 \hypertarget

    我正在使用 pypandoc 将 markdown 文件转换为 LaTex 我的 markdown 文件有一个标题 例如 Header Text 当 pypandoc 将文件呈现为 tex 文件时 显示为 hypertarget heade
  • 如何将 pChart 创建的图像保存到文件中?

    我正在使用以下内容 chartImage gt autoOutput statistics image png 问题是这段代码将图像输出到浏览器 如果它将图像保存到具有我指定的目录和名称的文件中 我会更喜欢它 我该怎么做呢 我正在查看 pC
  • Python + Pandas + dataframe:无法将一个数据帧附加到另一个数据帧

    我有两个大的 CSV 文件 我已将它们转换为 Pandas 数据框 它们都有相同名称和相同顺序的列 event name category category id description 我想将一个数据帧附加到另一个数据帧 最后想将生成的数
  • shell 脚本中的 Telnet

    如何在 shell 脚本中运行 telnet 并在远程服务器上执行命令 出于安全原因 我没有在我的Solaris 机器上安装expect 我也没有perlnet telnet模块已安装 那么如果不使用expect和perl我该怎么办呢 我尝
  • 来自 pandas 数据帧的共同出现矩阵

    Problem 我有一个 pandas 数据框 我需要计算数据框中每个唯一条目出现在每个其他条目的同一行中的行数 相关但不同的帖子 Python 中单词列表的共现矩阵 https stackoverflow com questions 42
  • 使用 Firebase Cloud Messaging(适用于 Android)时可以创建子主题吗?

    我目前正在开发一个使用新的 firebase 云消息传递系统的应用程序 现在我看到了FCM的主题特征 我创建了一个主题 新闻 并想要添加子主题 例如 新闻 天气 或 新闻 政治 总共有大约20个子主题 这对于 FCM 来说是可能的吗 这是神
  • 如果 html5

    我的应用程序隔离存储中有视频文件 并且想使用视频标签从 html 播放它 视频播放器运行 然后挂在 正在加载 有人可以设法使用 html5 视频标签和独立存储来播放视频吗 我的观察和测试 HTC HD7 Mango Beta 2 7 10
  • 使用 Ruby 解析纬度和经度

    我需要在 Ruby 下解析一些用户提交的包含纬度和经度的字符串 结果应以双精度形式给出 Example 08 04 49 09 13 12 Result 8 080278 9 22 我查看了 Geokit 和 GeoRuby 但没有找到解决
  • 在后台有 npm 监视文件以启用与 Visual Studio Task Runner 的集成

    我试图让 npm 监视我的客户端代码中的文件更改 我可以让它在命令行中工作 但我真的希望它能在 Visual Studio 任务运行器中工作 我的 package json 看起来像这样 watch compile patterns www
  • 需要使用同一数据库中另一表的数据填充一个表

    我正在尝试使用 mysql 从另一个表填充一个表 第一个表是用户 第二个表是技术人员 用户包含 用户ID 姓氏 名字 登录ID 密码 访问级别 技术人员包含 techID tech surname tech firstname tech l
  • 添加自签名证书而不提示用户是/否

    使用一些批处理文件 我想在 Java 密钥库中添加不受信任的自签名证书 命令是 JAVA HOME bin keytool import v trustcacerts alias server alias file server cer k
  • Java-使用InputStream作为文件

    我正在尝试使用上传的 docx 文件生成 PDF 文档JOD转换器 http www artofsolving com opensource jodconverter 对生成 PDF 的方法的调用如下所示 File inputFile ne
  • Powershell - 函数中的匹配 - 返回时获得额外的 true/false

    为什么我在这个函数的结果上得到提取 True 或 False 当我想要返回的只是邮政编码时 Function GetZipCodeFromKeyword String keyword pattern d 5 keyword match pa
  • 链接器如何在没有 SONAME 的情况下找到共享库

    如果我创建一个没有这样的 SONAME 的共享库 gcc shared libfoo o o libfoo so 并链接到它 链接器如何找到我的共享库 是文件名libfoo so链接器将其视为默认 SONAME 吗 我想你是正确的 ld 手
  • 添加到 models.py 后“NOT NULL 约束失败”

    我正在使用 userena 并将以下行添加到我的 models py 后 zipcode models IntegerField zipcode max length 5 点击注册表单上的提交按钮后 出现以下错误 IntegrityErro
  • 多个点之间的最短路线

    我需要找到多个点之间的最短路线 假设我有以下四点 var startPoint new Point 1 1 var pointsToGoPast new List
  • django软删除不级联删除

    我在 django 管理中使用软删除 就像this http codespatter com 2009 07 01 django model manager soft delete how to customize admin 问题是 当我