我在Django创建我的模型,我在供应品和货车套件之间有一个多对多的关系。这个想法是一个“物品”可以属于许多“货车套件”,而一个“货车套件”可以有许多“物品”。我创建了一个中介模型来保持这种关系,但是我很难找到一种方法来将van kit表中的数量与main supplies表中的数量联系起来。例如,如果我想将货车工具箱中的一个项目标记为损坏,并减少货车工具箱中该供应的数量,我还想减少主“供应”表中该供应的总计数,直到它被补充。我在想,也许我必须在我的视图文件中创建一个函数来实现这个逻辑,但是我想知道是否可以在我的模型设计中实现它,从而最小化出错的可能性。这是我的密码:
class supplies(models.Model):
class Meta:
verbose_name_plural = "supplies"
# limit the user to selecting a pre-set category
choices = (
('CREW-GEAR','CREW-GEAR'),
('CONSUMABLE','CONSUMABLE'),
('BACK-COUNTRY','BACK-COUNTRY')
)
supplyName = models.CharField(max_length=30, blank=False) # if they go over the max length, we'll get a 500 error
category = models.CharField(max_length=20, choices = choices, blank=False)
quantity = models.PositiveSmallIntegerField(blank=False) # set up default
price = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True) # inputting price is optional
def __str__(self):
return self.supplyName
class van_kit(models.Model):
supply_name = models.ManyToManyField(supplies, through='KitSupplies',through_fields=('vanKit','supplyName'), related_name="supplies")
van_kit_name = models.CharField(max_length=100)
vanName = models.ForeignKey(vans, on_delete=models.CASCADE)
def __str__(self):
return self.van_kit_name
class KitSupplies(models.Model):
supplyName = models.ForeignKey(supplies, on_delete=models.CASCADE)
vanKit = models.ForeignKey(van_kit, on_delete=models.CASCADE)
quantity = models.PositiveSmallIntegerField(blank=False)
def __str__(self):
return str(self.supplyName)
class Meta:
verbose_name_plural = 'Kit Supplies'
我是django的新手,我必须为一个班级项目学习它,所以如果我的逻辑有缺陷,或者如果更好的方法是显而易见的,请恭敬地让我知道。我对新的方法持开放态度。另外,我已经阅读了有关使用“through”和“through\ fields”来处理连接表的文档,但是我担心我可能没有正确地使用它。提前谢谢
一种方法是从
supplies
模型中删除字段quantity
,然后使用查询来获取总量这会有点贵,因为每次您想知道数字时都需要运行查询,但另一方面,它简化了您的设计,因为您不需要任何字段
supplies.quantity
的更新逻辑查询可能看起来很简单:
您甚至可以将其作为模型上的属性,以方便访问:
相关问题 更多 >
编程相关推荐