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

时间:2017-02-13 17:56:22

标签: python django sqlite django-models

我正在尝试为业务流程建模。我已经定义了一个类来保持进程蓝色打印(以及两个类来保持活动和流),然后我需要定义相同数量的表来保存与该类实例相关的所有数据。

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

我需要定义类似的类来保存实例的数据,即进程,活动和流程。

我尝试定义Process类来保留ProcessBluePrint的所有实例,但我无法做到正确。在django admin中,当我尝试添加一个新进程(创建ProcessBluePrint的实例并将其保存在适当的表中)时,ProcessBluePrint的名称和描述显示为文本,而应该是下拉列表。也许最好的方法是将其设为两步实例化:步骤1 =选择ProcessBluePrint选项,步骤2 =选择与该流程模型关联的所有字段。我附上了快照,以帮助您解决我的问题。我真的很感谢你对这个的帮助。 TIA

示意图

enter image description here

models.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

0 个答案:

没有答案
相关问题