我想在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。我不喜欢这个。那么,我是在接近这个错误,还是忘记了Django的一些简洁功能?如果我不需要,我宁愿不使用无模式数据库(Django管理员对于这个项目几乎是必不可少的)。有什么想法吗?
答案 0 :(得分:1)
django-model-utils
中的InheritanceManager正是您要找的。 p>
您可以使用以下代码遍历所有节点
nodes = Node.objects.filter(foo="bar").select_subclasses()
for node in nodes:
#logic