Функция сигнала, вероятно, переходит в бесконечное l oop, потому что вы сохраняете экземпляры той же модели в этой функции, по очереди каждый из которых запускает саму функцию сигнала. С небольшой осторожностью вы можете предотвратить это:
from django.db.models.signals import pre_save
@receiver(pre_save, sender=Tester)
def tester_pre_save(sender, instance, **kwargs):
if not instance.pk:
# This means that a new record is being created. We need this check as you want to do the operation when a new entry is **inserted** into table
Tester.objects.filter(test=instance.test).update(status='D')
или, с помощью сигнала post_save:
from django.db.models.signals import post_save
@receiver(post_save, sender=Tester)
def tester_post_save(sender, instance, created, **kwargs):
if created:
# This means that a new record has been created. We need this check as you want to do the operation when a new entry is **inserted** into table
Tester.objects.filter(test=instance.test).update(status='D')
Важными моментами здесь являются. так как мы используем update метода набора запросов для обновления существующих записей, они не будут вызывать сигналы, потому что они не используют метод сохранения модели, поэтому метод сигнала не будет запущен для других экземпляры мы обновляем здесь. И даже если бы он был запущен, так как мы выполняем операцию обновления при проверке состояния (если создается новый экземпляр), методы сигнала для этих других сохранений не будут ничего делать, следовательно, они не вызовут бесконечное oop.