这是我的模型:
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)
但是,我无法获得断开和连接的信号,有人有什么建议吗?
3条答案
按热度按时间8wtpewkr1#
你可以直接用
update
代替
vjrehmav2#
关于禁用特定
post_save
信号的方法的一些说明。在Django 2.2中不起作用。
关闭信号的工作选项如下所示:
zazmityj3#
它不适用于Django 4.0。
现在您需要禁用信号的某个处理程序。