這是我的模型:Django的:斷開post_save信號以避免遞歸
class Paper(models.Model):
...
collection = models.ForeignKey(Collection, on_delete=models.CASCADE)
rang = models.IntegerField(default=0)
class Meta:
ordering = ['collection','rang']
當保存模型,我希望它更新模型中的每個對象所有的「響」領域,使他們增加10。
我用post_save信號之下,以避免遞歸的問題:
@receiver(post_save, sender=Papier)
def redifine_rang(sender, *args, **kwargs):
for idx, paper in enumerate(Paper.objects.filter(collection = kwargs['instance'].collection)):
paper.rang = idx*10
Signal.disconnect(post_save, sender=Papier)
paper.save()
Signal.connect(post_save, sender=Papier)
但是,我不能去斷開和連接信號。有沒有人有任何建議?
可能是你可以使用'pre_save()'的信號,而不是'post_save()'和剛剛更新的領域pre_save做不要將實例保存在其中。 – Rohan