【发布时间】:2019-03-27 22:04:38
【问题描述】:
我的代码包含嵌套了多对多关系的模型,我需要清除关系,但是我的解决方案真的很慢,因为它会产生大量的 sql 查询。
我拥有的三个模型是 Parent、Child、GrandChild。父母可以有很多孩子,孩子有很多孙子。 我需要做的是删除给定父母的子孙关系。
class Parent:
children = models.ManyToManyField(Child)
class Child:
pass
class GrandChild:
# Can have many parents (aka. the child model)
parents = models.ManyToManyField(Child)
parent = models.Parent.objects.get(id=1)
children = parent.children.all()
for child in children:
children.grandchild_set.clear()
这实际上有效,并删除了与我们选择的父级关联的子级的所有子级与孙子级的关联。但是在我的情况下,每个父母通常有超过 5k 个孩子,每个孩子大约有 2 个孙子。但这会产生大量的 sql 查询,并且会超时。
我想知道是否有任何有效的方法可以批量或通过某种预取来执行此操作。
** 注意:我只想清除关系,不想删除对象本身。
【问题讨论】:
-
您能展示
Child和GrandChild模型(或至少定义两者之间关系的部分)吗?如果它是一对多或多对多,它会有所不同,你的问题在这方面有点令人困惑。 -
@EndreBoth 我刚刚进行了编辑。
标签: django django-models orm