python - 如何在 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)
如果只有一个命中数据库就好了。有办法吗?
解决方案
推荐阅读
- python-3.x - 为什么 GCP Pub/Sub 订阅无法确认消息?
- webdav - 如何使用 OpenOffice 进行 WebDAV PROPFIND 响应和协议
- reactjs - 使用 Jest + Enzyme 在 React 组件中导入的模拟节点模块
- debugging - 调试纯方法链
- javascript - 尽管有 V8 的闪烁调度程序,为什么频繁的垃圾收集会导致 UI 卡顿?
- javascript - 多个段落的随机颜色功能
- java - SortedMap 中的映射值
- angular - Ionic 根据 if 语句 ngStyle 和 ngFor 更改项目的颜色
- r - PowerBI:报告和仪表板中的时间戳不匹配
- acumatica - 当我尝试以编程方式创建项目时,为什么会收到 PX.Data.PXLockViolationException?