Django数据库:设计一个结合了两个模型的模型

时间:2015-08-07 09:17:11

标签: django database django-models

我有一个关于数据库设计的快速问题,我很乐意帮助你!

情况如下。我有两个模型,一个用于订单,另一个用于此订单所经历的步骤列表:

  • 型号:订单
    • 字段:Order_ID
  • 型号:步骤
    • 字段:Step_ID
    • 字段:Step_Name

但我想要的是每个订单都有一个表格,其中包含订单和每个步骤的字段,我可以在其中为订单设置该步骤的状态,例如:

订单ID | Step(id = 1)| Step(id = 2)| Step(id = 3)等。

因此,对于添加的每个订单,可以将步骤标记为[例如[已完成,已延迟,已跳过]:

20150401 |完成|延迟|完成

但我似乎无法弄清楚Django中需要做什么样的设置。我已经研究了多对多的领域,但我需要朝着正确的方向努力。

2 个答案:

答案 0 :(得分:2)

你到底想要的是根据使用它的顺序为步骤添加额外的字段。

如果我正确理解了您的问题,这称为Extra fields on many-to-many relationships我们可以定义Order可以让许多StepStep拥有许多Order所以这是ManytoMany关系。但是,您需要该关系的额外数据,这就是为什么您需要在关系中使用through关键字以便将实例链接到该关系。

class Order(models.Model):
    order_id = models.IntegerField(...)


class Step(models.Model):
    name = models.CharField(max_length=128)
    orders = models.ManyToManyField(Order, through='StepOrder')


class StepOrder(models.Model):
    order = models.ForeignKey(Order)
    step = models.ForeignKey(Step)

    ## date of the order starting this step
    date_created = models.DateField(...)
    date_end = models.DateField(...)

    status = models.CharField(max_length=128, default="Pending")

答案 1 :(得分:1)

您可以创建一个名为OrderStep的新模型,它将两者结合起来。

class Order(models.Model):
    ...


class Step(models.Model):
    step_name = models.CharField(max_length=50)
    orders = models.ManyToManyField(Order, through='OrderStep')


class OrderStep(models.Model):
    order = models.ForeignKey(Order)
    step = models.ForeignKey(Step)
    status = models.CharField(max_length=50)
相关问题