Django-如何在一个字段中添加同一模型的多个实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-如何在一个字段中添加同一模型的多个实例相关的知识,希望对你有一定的参考价值。

我有一个看起来像这样的课程。在包装物品中,我想拥有该物品实例的编号以及其中多少个为数字。

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(decimal_places=2, max_digits=10)
    is_pack = models.BooleanField(default=False)
    pack_items = models.ManyToManyField(PackItem, blank=True)
class PackItem(models.Model):
    packitem = models.ForeignKey('Item', on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

这似乎可行,但是每次我在管理员中创建一个新包时,我都必须先一个一个地创建每个PackItem,然后将它们放在Item的packitems字段中。目标是:我有几瓶饮料作为物品,并且我想预制这些饮料的包装。我的方式会在以后引起问题吗?有更好的做法吗?还是这已经错了?

答案

如果我理解正确,您需要的是through=… model [Django-doc]的多对多字段。所以我们可以实现一个

through=…

因此,我们在这里指定class Item(models.Model): title = models.CharField(max_length=100) price = models.DecimalField(decimal_places=2, max_digits=10) class Pack(models.Model): items = models.ManyToManyField(Item, through='PackItem') class PackItem(models.Model): item = models.ForeignKey(Item, on_delete=models.CASCADE) pack = models.ForeignKey(Pack, on_delete=models.CASCADE) quantity = models.IntegerField(default=1)由一组项目组成,但是Pack将包含一个名为junction table [wiki]的额外参数,该参数指定将quantity添加到Item对象的次数。

以上是关于Django-如何在一个字段中添加同一模型的多个实例的主要内容,如果未能解决你的问题,请参考以下文章

如何在django中为问题添加多个表单字段类型的选项?

如何在 Django 中向模型添加临时字段?

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

有效地更新同一字段多个对象django

同一模型的多个版本的 django 管理页面

当更新同一模型中的另一个特定字段时,如何更新 Django models.DateTimeField?