首页 > 解决方案 > 如何在 Django 中有效地创建树节点的关系?

问题描述

我有模型关系,它将祖先与其所有后代联系起来:

class Relation(models.Model):
    ancestor = models.ForeignKey('Node')
    descendant = models.ForeignKey('Node')
    # Number of edges between ancestor and descendant
    power = IntegerField()

和模型节点:

class Node(models.Model):
    ...some data...
    def save(self, parent, *args, **kwargs):
        self.create_relations(parent)
        return super().save(*args, **kwargs)

我需要有效地创建新节点和祖先之间的关系。我设法编写了下一个函数:

    def create_relations(self, parent):
        relations_of_parent = Relation.objects.filter(descendant=parent).values_list('ancestor', 'power')
        relations = []
        for ancestor, power in relations_of_parent:
            relations.append(Relation(ancestor=ancestor, descendant=self, power=power + 1))
        relations.append(Relation(ancestor=parent, descendant=self, power=1))
        Relation.objects.bulk_create(relations)

如果只有一个命中数据库就好了。有办法吗?

标签: pythondjangodjango-models

解决方案


推荐阅读