我有个关于 Django 的问题。
我这里有ManyToMany模型
class Product(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(default=0.0, max_digits=9, decimal_places=2)
stock = models.IntegerField(default=0)
def __unicode__(self):
return self.name
class Cart(models.Model):
customer = models.ForeignKey(Customer)
products = models.ManyToManyField(Product, through='TransactionDetail')
t_date = models.DateField(default=datetime.now())
t_sum = models.FloatField(default=0.0)
def __unicode__(self):
return str(self.id)
class TransactionDetail(models.Model):
product = models.ForeignKey(Product)
cart = models.ForeignKey(Cart)
amount = models.IntegerField(default=0)
对于创建的1个购物车对象,我可以插入多达新的TransactionDetail对象(产品和金额)。我的问题是。我如何实现触发器?我想要的是每当创建Transaction明细时,我希望产品的库存金额减去transactiondetail中的金额。
我读过关于post_保存()的文章,但是我不确定如何实现它。
当:
post_save(TransactionDetail,
Cart) #Cart object where TransactionDetail.cart= Cart.id
Cart.stock -= TransactionDetail.amount
5条答案
按热度按时间9rnv2umw1#
如果你真的想使用信号来实现这一点,这里简要介绍了如何,
w80xi6nr2#
就我个人而言,我会覆盖TransactionDetail的保存()方法,并在其中保存新的TransactionDetail,然后运行
k2arahey3#
如果你想避免得到
maximum recursion depth exceeded
,那么你应该在保存信号处理程序之前 * 断开 * 信号。上面的例子(Kenny Shen的答案),然后是:这在Disconnect signals for models and reconnect in django中有详细的描述,其中有一个更抽象和有用的示例。
另请参阅:https://docs.djangoproject.com/en/2.0/topics/signals/#disconnecting-signalsin the django docs.
cwtwac6a4#
如果你真的想在django中使用信号,请尝试以下操作:
然后在init文件中添加
default_app_config
llew8vvj5#
事实上,文档字符串解释了
Signals
在django.dispatch.Signal.connect
中: