在 django 的多对多关系中添加额外的字段

Posted

技术标签:

【中文标题】在 django 的多对多关系中添加额外的字段【英文标题】:Add extra field in manytomany relationship in django 【发布时间】:2020-06-20 06:32:21 【问题描述】:

我正在尝试创建我的应用程序的模型,但在布局中感到困惑

class Product(models.Model):

    name = models.CharField(max_length=500, default=0)
    short_code = models.CharField(max_length=500, default=0,unique=True)

class Kit(models.Model):

    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    kit_name = models.CharField(max_length=500, default=0)
    product = models.ManyToManyField(Product)

现在一个人可以在应用中添加多个产品,而一个 Kit 可以有多个产品, 问题从这里开始。我想将数量字段添加到Kit 模型,以便人们可以在套件中添加特定项目及其数量。我该怎么做?

【问题讨论】:

docs.djangoproject.com/en/3.0/topics/db/models/… 【参考方案1】:

像这样扩展您的 Kit 模型:

class Kit(models.Model):

    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    kit_name = models.CharField(max_length=500, default=0)
    product = models.ManyToManyField(Product)
    quantity = models.FloatField()

然后用户可以在form 中定义Product 及其quantity。这就是您真正需要的所有内容来涵盖您呈现的设置。

更新您的评论

然后我会去寻找另一个像这样的关系:

class ProductQuantity(models.Model):
    quantity = models.ManyToManyField(Product)
    # and remove it from the Kit Model

所以每个Product 都可以链接到它的quantity

【讨论】:

但是我不能通过这个解决方案拥有每个productquantity @RahulSharma 啊,从一开始就没有直接解决您的问题。在这种情况下,我会添加另一个关系,请参阅答案中的更新

以上是关于在 django 的多对多关系中添加额外的字段的主要内容,如果未能解决你的问题,请参考以下文章

Android Room - 带有附加字段的多对多关系

Doctrine 2 和带有额外字段的多对多链接表

带有额外列的多对多自引用原则

如何在 Django 中向多对多关系中添加字段?

如何过滤和访问 Django QuerySet 中的多对多字段?

在 Django 中自动填充一组通用的多对多字段?