python - 具有多个类关联作为后继的树结构

标签 python django model decision-tree

我正在尝试创建一个决策树结构,其中包含一个节点产生的多个类,但我不知道使用 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“破解”它谁可以定位 <Category> , <Group><Node>但我不喜欢这个实现,因为它不保留递归删除原则而不覆盖 delete()方法。

最重要的是,我重写了 Django 本身管理的一些机制。

自定义字段是解决此问题的一种方法,但我不太熟悉它,我认为这是一种不成比例的方法。

有人可以帮我实现这个吗?

谢谢

最佳答案

关于python - 具有多个类关联作为后继的树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23886492/

相关文章:

python - scrapy获取不完整的html

python - <element> 的 Pyxb 实例没有开始标记的绑定(bind)元素

python - Django Rest Framework : One URL for POST, 同一 APIView 上的 GET 的一个 URL

Java 模式问题 - 模型中的构建器或数据库代码?

php - YII : How to Change datetime format displayed on the View

python - float() 参数必须是字符串或数字,而不是 'Timestamp'

python - 为什么这个列表理解比 Python 中使用 for 循环进行条件初始化慢?

python - Django Python 休息框架,在 chrome 中请求的资源上不存在 'Access-Control-Allow-Origin' header ,在 firefox 中工作

python - render_to_string 方法中的 Django 自定义 context_processors

opengl - 如何在OpenGL中为3D模型(网格)设置动画?