我有两个基本模型,一个命令和一个流。流可以包含一系列命令或其他嵌套流。因此,任何给定的 Flow 都可以有一个 Step 或 Flow 类型的子列表。(这类似于您可能在文件系统中建模的文件和目录。)
我尝试使用 ContentTypes、通用关系和 mptt(它不允许通用内容类型 AFAIK)对此进行建模,但没有成功。这是我的基本模型:
class Step(models.Model):
parent = models.ForeignKey('Step', null=True)
name = models.CharField( max_length=100 )
start_time = models.DateTimeField(null=True)
end_time = models.DateTimeField(null=True)
state = models.CharField( max_length=1, default='u' )
class Flow(Step):
type = models.CharField( max_length=1 )
def getChildren(self):
# todo: the steps returned here need to be sorted by their order in the flow
return Step.objects.filter(parent_id=self.parent_id)
def run(self):
for child in self.getChildren():
print("DEBUG: run method processing a {0}".format(child.__class__.__name__) )
# if this is a flow, run it
# else if it's a command, execute it
class Command(Step):
exec_string = models.TextField()
我希望能够在我的应用程序中创建流,查询子项,然后根据其类型对每个子项进行不同的处理(命令被执行,流被递归处理。)
我将不胜感激对我上面的代码进行任何更正,这将使这成为可能,甚至评论我正在以完全错误的方式处理这个问题。
编辑:我应该补充一点,我正在使用 Python 3.3 和 Django dev(命名为 1.6)