我正在尝试使用多个类创建一个决策树结构,但是我不知道用Django执行此操作的最佳方法是什么。
为了说清楚,这就是我想要做的事情(左子是条件有效的情况,右子是条件无效的时候):
(Condition A)
|
-------------------------------
| |
(Condition B) (Condition C)
| |
------------------ |------------
| | | |
(Cond D) <Category> + <Group> <Cat>+<Gr> (Cond D)
| |
.. ...
我们的想法是将一对夫妻(<Category>
,<Group>
)或另一个<Node>
与儿子相关联。问题是,“如何在Django中表示多个类字段?”
这是我的模特:
class GroupDecision(models.Model):
name = models.CharField(max_length=100)
# Other fields that may come later
class DecisionTree(models.Model):
name = models.CharField(max_length=100)
start_node = models.ForeignKey('Node')
# Other fields that may come later
class Node(models.Model):
name = models.CharField(max_length=100)
predecessor = models.ForeignKey('Node', null = True, blank = True, default = None)
successor = models.ForeignKey('SuccessorAssociation')
operation = models.ForeignKey('Filter')
class SuccessorAssociation(models.Model):
TARGET = (('C','Category'),('G','Group'),('N','Node'))
condition = models.BooleanField()
target_class = models.CharField(max_length=10,choices=TARGET)
target_pk = models.IntegerField()
我设法使用SuccessorAssociation
“{ha了”它,可以定位<Category>
,<Group>
或<Node>
,但我不喜欢这个实现,因为它没有不保留递归删除原则而不覆盖delete()
方法。
最重要的是,我正在覆盖一些由Django本身管理的机制。
自定义字段是解决此问题的一种方法,但我并不熟悉它,我认为这是一种不成比例的方法。
有人可以帮我实现吗?
谢谢
答案 0 :(得分:1)
使用contenttypes
框架和通用外键:https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations