Django 模型与另一个模型的多个对象的“容器”相关

问题描述 投票:0回答:1

对于奇怪的主题命名感到抱歉,但试图找出与某种对象集创建模型关系的最佳方法。 假设我有一些模型:

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
字段) )。 我知道模型架构很奇怪,因为它是遗留代码,但欢迎任何建议。

django database django-models
1个回答
0
投票

您可以创建一个“容器”模型,通过多对多关系链接家具、管道和零件模型。例如:

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 模型,充当家具、管道和零件的容器。每个项目类型可以链接到多个容器,并且容器可以容纳相关的部件。这可以避免添加空字段并为未来的关系提供灵活性。

© www.soinside.com 2019 - 2024. All rights reserved.