我有一个关于数据库设计的快速问题,我很乐意帮助你!
情况如下。我有两个模型,一个用于订单,另一个用于此订单所经历的步骤列表:
但我想要的是每个订单都有一个表格,其中包含订单和每个步骤的字段,我可以在其中为订单设置该步骤的状态,例如:
订单ID | Step(id = 1)| Step(id = 2)| Step(id = 3)等。
因此,对于添加的每个订单,可以将步骤标记为[例如[已完成,已延迟,已跳过]:
20150401 |完成|延迟|完成
但我似乎无法弄清楚Django中需要做什么样的设置。我已经研究了多对多的领域,但我需要朝着正确的方向努力。
答案 0 :(得分:2)
你到底想要的是根据使用它的顺序为步骤添加额外的字段。
如果我正确理解了您的问题,这称为Extra fields on many-to-many relationships我们可以定义Order
可以让许多Step
和Step
拥有许多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)