This is my model:
class Paper(models.Model):
...
collection = models.ForeignKey(Collection, on_delete=models.CASCADE)
rang = models.IntegerField(default=0)
class Meta:
ordering = ['collection','rang']
When saving the model, I want it to update all the 'rang' fields in each object of the model so that they increase by 10.
I use the post_save signal below to avoid a problem of recursion:
@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)
However, I can't get the signal to disconnect and connect. Does anyone have any recommendations?
you can just use update
Paper.objects.filter(pk=paper.pk).update(rang=idx*10)
instead of
paper.rang = idx*10
Signal.disconnect(post_save, sender=Papier)
paper.save()
Signal.connect(post_save, sender=Papier)