У меня есть модель Relation, которая связывает предка с all его потомками:
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)
Было бы хорошо, если бы была только одна база данных попаданий. Есть ли способ?