我有两个模型, A 和 B 。每当我在模型B 中插入另一个值时,我想在模型A 的一个字段中增加值。我正在使用post_save信号,但我一直收到此错误“'update_fields'是此函数的无效关键字参数”
下面是我的代码,谢谢你的帮助。
class Sales(models.Model):
id = models.AutoField(primary_key=True)
order_details = models.ForeignKey(GeneralConsulting)
medication_name_id = models.ForeignKey(Medication_List)
dosage = models.CharField(max_length=10, blank=True)
duration = models.CharField(max_length=10, blank=True)
quantity = models.IntegerField(default=0)
...
@receiver(signals.post_save, sender=Sales)
class Product(models.Model):
id = models.AutoField(primary_key=True)
product_name = models.ForeignKey(Medication_List)
description = models.TextField(blank=True)
supplier = models.ManyToManyField(Supplier, blank=True)
expiration_date = models.DateField(blank=False, null=True )
...
quantity_sold = models.IntegerField(default=0)
minimum_stock_level = models.IntegerField(default=1)
def add_on(self, sender, created, instance, update_fields, **kwargs ):
if created or update_fields is 'quantity':
b = Product.objects.get(product_name_id=instance.id)
if b.quantity_sold + instance.quantity <= b.initial_qty:
b.quantity_sold = b.quantity_sold + instance.quantity
b.save(update_fields=['quantity_sold'])
所以我想要做的就是增加Product.quantity_sold字段中的值 每当新的销售增加时。
请帮助,我对django信号很新。有一个更好的方法吗?感谢
答案 0 :(得分:0)
覆盖班级save
的{{1}}方法怎么样?例如:
Sales
基本上,只要您需要保存新的促销活动,就可以在保存之前增加相关产品class Sales(models.Model):
id = models.AutoField(primary_key=True)
order_details = models.ForeignKey(GeneralConsulting)
medication_name_id = models.ForeignKey(Medication_List)
dosage = models.CharField(max_length=10, blank=True)
duration = models.CharField(max_length=10, blank=True)
quantity = models.IntegerField(default=0)
def save(self, *args, **kwargs):
p = Product.objects.get(product_name=self.medication_name_id)
p.quantity_sold += self.quantity
p.save()
super(Sales, self).save(*args, **kwargs)
。我假设您通过quantity_sold
获得与销售相关的产品。
警告:您还可以调用Medication_List
方法来更新预先存在的对象。如果您计划更新现有销售,则需要的不仅仅是上述代码。否则,您仅为销售更新增加产品save
。