如何实例化与多个表关联的类并将其保存在多个表中?

2024-04-25 03:55:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对业务流程进行建模。我定义了一个类来保存流程蓝图(两个类来保存活动和流),然后我需要定义相同数量的表来保存与该类实例关联的所有数据

我有一个叫做ProcessBluePrint的类。该类实际上由两个称为ActivityBluePrint和FlowBluePrint的类定义。到目前为止一切正常

我需要定义类似的类来保存创建时实例的数据,即流程、活动和流

我试图定义Process类以保留ProcessBluePrint的所有实例,但我无法正确地定义它。在django admin中,当我尝试添加新流程(创建ProcessBluePrint实例并将其保存在适当的表中)时,ProcessBluePrint的名称和说明显示为文本,而它应该是下拉列表。也许最好的方法是将其设置为两步实例化:步骤1=选择ProcessBluePrint选项,步骤2=选择与该流程模型关联的所有字段。我已附上快照,以帮助您了解我的问题所在。我非常感谢你在这件事上的帮助。短暂性脑缺血发作

示意图

enter image description here

型号.py

class ProcessBluePrint(models.Model):
    name=models.CharField(max_length=50, unique=True,)
    desc=models.CharField(max_length=255,)

    def __str__(self):
        return self.name

class ActivityBluePrint(models.Model):
    tag=models.CharField(max_length=10,)
    caption=models.CharField(max_length=50,blank=True)
    process_blueprint=models.ForeignKey('ProcessBluePrint')
    activity=models.ForeignKey('Activity')
    action=models.ForeignKey('Action')
    actor=models.ForeignKey('auth.User')

    def __str__(self):
        if self.caption:
            return self.process_blueprint.name + '_Activity_' + self.tag + ' (' + self.caption + ')'
        else:
            return self.process_blueprint.name + '_Activity_' + self.tag

    class Meta:
        ordering=['tag']


class FlowBluePrint(models.Model):
    caption=models.CharField(max_length=50,blank=True)
    process_blueprint=models.ForeignKey('ProcessBluePrint')
    origin=models.ForeignKey('ActivityBluePrint',related_name='origin')
    destination=models.ForeignKey('ActivityBluePrint',related_name='destination')

    def __str__(self):
        return  self.process_blueprint.name + '_Flow_' + self.origin.tag  + 'to' + self.destination.tag

class Process(ProcessBluePrint, models.Model):
    type=models.ForeignKey('ProcessType')
    prodline=models.ForeignKey('ProdLine')
    business=models.ForeignKey('Business')
    project=models.ForeignKey('Project')
    start=models.DateTimeField(auto_now_add=True,)
    end=models.DateTimeField(blank=True, auto_now=True)
    user_created=models.ForeignKey('auth.User')
    date_created=models.DateTimeField()
    notes=models.TextField(max_length=500,)
    status=models.ForeignKey('Status')

    class Meta:
        verbose_name_plural = 'Processes'

enter image description here


Tags: 实例nameselftrue定义modelstagprocess