对于奇怪的主题命名感到抱歉,但试图找出与某种对象集创建模型关系的最佳方法。 假设我有一些模型:
class Furniture(models.Model):
title = models.CharField()
category = models.ForeignKey(Category)
price = models.PositiveIntegerField()
class Plumbing(models.Model):
title = models.CharField()
....
class Part(models.Model):
title = models.CharField()
code = models.CharField()
我想建立每个
Furniture / Plumbing
实例与一组Part
实例(如配件、螺丝等)的关系。第一个最明显的方法是在 ManyToMany
和 Furniture
模型中创建 Plumbing
字段。但想知道是否有另一种方法来创建某种“容器”以将所有对象关联在一起。正如我们所知 - Django 中没有 one-to-many
字段,如果我决定为许多其他模型(不仅是 null
和 Part
建立关系,我不想在 Furniture
中保留植物性 Plumbing
字段) )。
我知道模型架构很奇怪,因为它是遗留代码,但欢迎任何建议。
您可以创建一个“容器”模型,通过多对多关系链接家具、管道和零件模型。例如:
class ItemContainer(models.Model):
name = models.CharField(max_length=100)
class Furniture(models.Model):
title = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
price = models.PositiveIntegerField()
containers = models.ManyToManyField(ItemContainer)
class Plumbing(models.Model):
title = models.CharField(max_length=100)
containers = models.ManyToManyField(ItemContainer)
class Part(models.Model):
title = models.CharField(max_length=100)
code = models.CharField(max_length=50)
containers = models.ManyToManyField(ItemContainer)
在此结构中,您创建一个 ItemContainer 模型,充当家具、管道和零件的容器。每个项目类型可以链接到多个容器,并且容器可以容纳相关的部件。这可以避免添加空字段并为未来的关系提供灵活性。