Django模型循环关系

时间:2020-07-16 12:33:57

标签: django django-models

我对Django模型有问题。我有位置,机器和零件。

  • 一个地点有很多机器。
  • 每台机器都有很多零件。
  • 不同的机器可以具有相同的零件。
  • 零件项目具有默认文件/文档/照片。每台使用的机器 零件有自己的零件文件/文档/照片。
  • 零件具有默认的维护步骤,但是对于某些机器, 零件物料的维护程序可以与默认值不同 或与默认设置相同。
class location(models.Model):
    name = models.CharField(max_length=30, unique=True)
    description = models.CharField(max_length=100)

class machine(models.Model):
    name = models.CharField(max_length=100)
    descirption = models.CharField(max_length=255)
    location = models.ForeignKey(location, on_delete=models.CASCADE, related_name='machine')

class partitem(models.Model):
    itemNumber = models.CharField(max_length=100)
    descirption = models.CharField(max_length=255)
    machine = models.ForeignKey(machine, on_delete=models.CASCADE, related_name='machine')
    procedureDefault = models.CharField(max_length=255)
    attachmentDefault = models.FileField(upload_to='uploads/%Y/%m/%d/')

如果某些机器的零件和附件与默认零件不同,如何定义零件的附件和过程?

procedureForEachMachine = models.CharField(max_length=255)
attachmentForEachMachine = models.FileField(upload_to='uploads/%Y/%m/%d/')

1 个答案:

答案 0 :(得分:0)

这似乎是ManyToMany relationship with extra fields的情况。

这是因为附件和过程不是Partitem属性,而是每个Machine x Partitem关系所独有的(尽管在大多数情况下,它将假定默认值仅取决于Partitem)。

就像这样:

class Machine(models.Model):
    name = models.CharField(max_length=128)

class PartItem(models.Model):
    machine = models.ManyToManyField(Machine, through='MachinePartItem')

class MachinePartItem(models.Model):
    machine = models.ForeignKey(Machine, on_delete=models.CASCADE)
    part_item = models.ForeignKey(PartItem, on_delete=models.CASCADE)
    procedureDefault = models.CharField(max_length=255)
    attachmentDefault = models.FileField(upload_to='uploads/%Y/%m/%d/')