我想在 Django 中创建一个有向图,但每个节点都可以是一个单独的模型,具有单独的字段等。
这是我到目前为止所得到的:
from bannergraph.apps.banners.models import *
class Node(models.Model):
uuid = UUIDField(db_index=True, auto=True)
class Meta:
abstract = True
class FirstNode(Node):
field_name = models.CharField(max_length=100)
next_node = UUIDField()
class SecondNode(Node):
is_something = models.BooleanField(default=False)
first_choice = UUIDField()
second_choice = UUIDField()
(显然FirstNode
和SecondNode
是更多特定领域模型的占位符,但希望你明白这一点。)
所以我想做的是一次查询所有子类,返回所有匹配的子类。我不太确定如何有效地做到这一点。
我尝试过的事情:
- 用查询迭代子类——我不喜欢这样,因为查询的数量可能会变得很重。
- 制作
Node
混凝土。显然我仍然必须检查每个子类,这可以追溯到#1。
我考虑过的事情:
- 制作
Node
课程,并在其中粘贴一个 JSON blob。我不喜欢这个。 - 将指针存储在外部表或系统中。这意味着每个 UUID 有 2 个查询,理想情况下我希望有 1 个,但在紧要关头它可能会做得很好。
那么,我是在接近这个错误,还是忘记了 Django 的一些简洁功能?如果不需要,我宁愿不使用无模式数据库(Django 管理员对于这个项目几乎是必不可少的)。有任何想法吗?