每当创建“PurchaseItem”对象时,我都希望更新“Item”中的库存值。
模型.py(1):
class PurchaseItem(models.Model):
product = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.PositiveSmallIntegerField()
purchase_price = models.DecimalField(max_digits=6, decimal_places=2)
paid_amount = models.DecimalField(max_digits=6, decimal_places=2)
date_created = models.DateTimeField(auto_now_add=True)
这里,quantity表示购买的物品数量,所以当我创建这个对象时;我希望在此处更新库存值:模型.py(2):
class Item(models.Model):
title = models.CharField(max_length=100)
model = models.CharField(max_length=100)
sku = models.CharField(max_length=100)
ean = models.CharField(max_length=100)
price = models.FloatField()
inventory = models.IntegerField()
3条答案
按热度按时间pbgvytdp1#
首先,我想纠正另一个家伙谁回答有关related_name,它应该这样做:
添加related_name以便更好地查询:
现在,从Item示例中,您可以获取所有以“product”作为Item示例的PurchaseItem示例,例如:
但您不需要它来创建signals ...您需要做的只是:
请参考文档以获得更好的解释,我尽了最大努力使其简洁,并在信号文档字符串上进行了解释。
但是,使用该代码,您将能够在PurchaseItem创建时减少项目库存,并在PurchaseItem删除时增加项目库存
k97glaaz2#
您可以使用signals或:
首先编辑PurchaseItem模型,并将related_name添加到product字段:
现在,当您创建采购项目时:
但尽量使用信号。
bvpmtnay3#
使用Django,有三种方法:
1.创建一个每当创建
PurchaseItem
时都会调用的信号接收器,该信号可以调用处理更新逻辑的方法。1.重写
PurchaseItem
的save()
方法,检查是否正在创建或更新对象,然后调用另一个处理更新逻辑的方法。1.您也可以有一个视图调用更新逻辑,但是您可能希望尽可能地将业务隐藏在视图之外。
希望这对你有帮助