使用django信号

时间:2018-04-04 23:36:57

标签: python django django-models relational-database django-signals

我有两个模型, 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信号很新。有一个更好的方法吗?感谢

1 个答案:

答案 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