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-如何在一个字段中添加同一模型的多个实例的主要内容,如果未能解决你的问题,请参考以下文章