我们可以更新与外键Django Signls相关的实例吗

时间:2020-07-10 10:27:08

标签: python django signals

嗨,我想更新与外键值相关的实例

例如我有这两个模型

class Collection(models.Model):
    model = models.ForeignKey(Product, on_delete=models.CASCADE) 
    company_name = models.ForeignKey(Company,on_delete=models.SET_NULL,null=True)
    price = models.IntegerField()
    cash = models.IntegerField()
    qnt = models.IntegerField()

    @property
    def product_loan(self):
        return (self.price * self.qnt ) - self.cash

class Company(models.Model):
    name = models.CharField(max_length=40)
    balance= models.IntegerField()

我想每创建一个Collection中的实例然后更新Company中的余额时,我就尝试了这个django信号,但似乎不起作用

def post_save_collection(sender,instance,created,*args,**kwargs):
    if created:
        instance.company_name.balance =instance.company_name.balance +((instance.price * instance.qnt) - instance.cash)
        #and also tried this but not worked 
        #instance.company_name.balance = instance.product_loan
post_save.connect(post_save_collection,sender=Collection)

请问有什么我想念的吗?还是我应该更改其他内容?

1 个答案:

答案 0 :(得分:0)

我不得不使用update

def post_save_collection(sender,instance,created,*args,**kwargs):
    if created:
        Company.objects.filter(name=instance.company_name).update(
        balance=F('balance')+instance.product_loan
           )
post_save.connect(post_save_collection,sender=Collection)