首页 > 解决方案 > 你能写一个 Django ManyToMany 自定义级联删除吗?

问题描述

我正在将 Django 3.1 与 PostgreSQL 一起使用。这是一个示例设置:

**Tables:**
Batch (id, name)
Data (id, Batch, Stuff(ManyToMany))
Stuff (id, name)

考虑这种情况:如果我在 Batch 中添加一条 id 为 1 的记录,然后在链接到 Batch#1 的 Data 中添加 10,000 条记录,并且每个项目都可能引用 Stuff 表中的一些项目。

问题: 如果我删除 Batch#1,它最终会创建一个这样的查询来删除多对多关系:

DELETE FROM "data_stuff" WHERE "data_stuff"."data_id" IN (1, 2, 3 ... 9999, 10000)

那是列出了很多ID。我希望查询是这样的:

DELETE FROM "data_stuff" WHERE "data_stuff"."data_id" IN (SELECT U0."id" FROM "data" U0 WHERE U0."batch_id" = 1)

关于在删除批处理记录时如何让它像我的第二个示例一样生成 SQL 的任何想法?

标签: djangodjango-models

解决方案


推荐阅读