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

Python Django-如何在一个字段中添加同一模型的多个实例,python,django,Python,Django,我有一节课看起来像这样。在pack items中,我想知道Item实例的编号,以及其中的多少作为一个编号 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_ite

我有一节课看起来像这样。在pack items中,我想知道Item实例的编号,以及其中的多少作为一个编号

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)
这似乎是可行的,但每次我在管理中创建一个新的包,我必须首先一个接一个地创建每个PackItem,然后将它们放在项目的packitems字段中。
目标是:我有瓶装饮料作为物品,我想有预先制作好的饮料包装。我这样做会不会导致以后的问题?有更好的做法吗?或者这已经错了吗?

如果我理解正确,您需要的是一个带有。所以我们可以实施

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)
类项(models.Model):
title=models.CharField(最大长度=100)
price=models.DecimalField(小数位=2,最大位数=10)
类包(models.Model):
items=models.ManyToManyField(Item,通过class='PackItem')
PackItem类(models.Model):
item=models.ForeignKey(item,on_delete=models.CASCADE)
pack=models.ForeignKey(pack,on_delete=models.CASCADE)
数量=型号。整数字段(默认值=1)

因此,这里我们指定一个
Pack
由一组项目组成,但将包含一个名为
quantity
的额外参数,该参数指定我们将
项目添加到
Pack
对象的次数。

为什么
Item
PackItem
之间都有一个m2m,外键FOM <代码> PackItem <代码> >代码>项目< /代码>?我的实际项目模型更胖,我也想把一个包看作一个项目。物品和包装的唯一区别在于包装由其他物品组成<代码>类别项(models.Model):title=models.CharField(max_length=100)price=models.DecimalField(DecimalField=2,max_digits=10)items=models.ManyToManyField('self',through='PackItem')类别PackItem(models.Model):Item=models.ForeignKey(Item,on_delete=models.CASCADE)quantity=models.IntegerField(默认值=1)
这样的东西能完成任务吗?@moddayjob:从
项目到
PackItem的
manytomy
非常“奇怪”,特别是当你把
外键从
PackItem
放到
项目时。两个模型之间存在多重关系并非不可能,但并非如此。此外,将
数量
添加到
PackItem
中非常奇怪,因为这似乎不是
PackItem
的属性,而是
PackItem
相关的属性。此外,我不太明白为什么要将
存储在
中。特别是因为我们可以通过查看它是否是相关的
包的成员来确定它。我可能完全做错了。我认为将
Pack
Item
视为同一个东西,一个不同的包包含多个不同数量的实例。我以为那样会更简单。我以为
is\u pack
很方便,但我会把它扔掉。@moddayjob:一个包能装其他包吗?
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)