У меня есть код с моделями, которые вложили отношения многие ко многим, и мне нужно очистить отношения, однако решение, которое у меня есть, действительно медленное, так как оно выполняет тонны 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()
Это на самом деле работает и устраняет все ассоциации ребенка с внуком для ребенка, связанные с выбранным нами родителем. Однако в моем случае на одного родителя обычно приходится более 5 тысяч детей, а на каждого ребенка приходится около двух внуков. Но это делает тонны SQL-запросов и время ожидания.
Мне интересно, есть ли какой-нибудь эффективный способ сделать это навалом или какой-либо предварительной загрузкой.
** Примечание: я хочу только очистить отношения, не хочу удалять сами объекты.