Command と Flow の 2 つの基本モデルがあります。フローには、一連のコマンドまたは他のネストされたフローを含めることができます。したがって、特定のフローは、ステップ タイプまたはフロー タイプのいずれかである子のリストを持つことができます。(これは、ファイル システムでモデル化する可能性のあるファイルとディレクトリに似ています。)
ContentTypes、ジェネリック リレーション、および mptt (ジェネリック コンテンツ タイプの知る限り許可されていません) を使用してこれをモデル化しようとしましたが、成功しませんでした。ここに私の基本的なモデルがあります:
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()
アプリでフローを作成し、子にクエリを実行し、そのタイプに応じて各子を異なる方法で処理できるようにしたいと考えています (コマンドは実行され、フローは再帰的に処理されます)。
これを可能にする上記のコードの修正、またはDjangoにとって完全に間違った方法でこの問題に取り組んでいるというコメントさえいただければ幸いです。
編集: Python 3.3 と Django dev (名前は 1.6) を使用していることを追加する必要があります。