Django错误:“ RelatedManager”对象没有属性“保存”

时间:2018-11-02 08:00:09

标签: python django django-models django-signals

这是我的模特

class Stock_Total(models.Model):
    purchases   = models.ForeignKey(Purchase,on_delete=models.CASCADE,null=True,blank=True,related_name='purchasetotal')
    stockitem   = models.ForeignKey(Stockdata,on_delete=models.CASCADE,null=True,blank=True,related_name='purchasestock') 
    gst_rate    = models.DecimalField(max_digits=4,decimal_places=2,default=5)

@receiver(pre_save, sender=Stock_Total)
def update_gst_rate(sender, instance, *args, **kwargs):
    instance.gst_rate = instance.stockitem.gst_rate

@receiver(post_save, sender=Purchase)
def trigger_gst(sender, instance, *args, **kwargs):
    instance.purchasetotal.save()

“ Purchase”和“ Stockdata”是我创建的其他模型...我只想在保存“ Purchase”模型时保存Stock_Total模型,即当我在“ Purchase”模型上单击“ Save”时,Stock_Total模型将自动更新以及购买模式...

有人知道吗?

1 个答案:

答案 0 :(得分:0)

  

只要保存购买模型,我只想保存Stock_Total模型

您不需要信号。见下文;名称已更改,以保护PEP 8

class StockTotal(models.Model):
    purchases = models.ForeignKey(
        Purchase,
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name='stock_totals',
    )
    # ...


class Purchase(models.Model):
    # ...

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        for total in self.stock_totals.all():
            # Do whatever updates you want here
            total.save()

请注意,这里的total值将是数据库值;它们将通过[related_name].all()调用重新获得。

我不清楚您要做什么。保存关联的StockTotal对象时,如果要在Purchase实例上编辑值,则可以使用;如果您只想确保维持m2m关系,则无需为此做任何事情。

如果这没有帮助,请修改您的问题以澄清问题。