Сигнал post_delete
[Django-doc] делает не отправку параметра created
.
Однако вы можете легкоисправьте это, добавив значение по умолчанию к параметру:
@receiver([post_save, post_delete], sender=Following)
def change_followers(instance, <b>created=False</b>, **kwargs):
if created:
instance.follower.following_count += 1
instance.target.follower_count +=1
instance.save()
else:
instance.follower.following_count -= 1
instance.target.follower_count -=1
instance.save()
Обратите внимание, что логика все еще неверна : поскольку при обновлении экземпляра модели вы вызовете post_save
, но это не означает, что этот экземпляр удален.Кроме того, если вы обновляете экземпляр модели, это может означать, что target
/ follower
изменяется, и, следовательно, вы должны уменьшить это число.
Более того, вероятно, не стоит использовать сигналы для вычисления последователейВ любом случае считается, поскольку вызовы Django ORM могут обходить сигналов.Возможно, лучше пометить ваши объекты числом Following
с.Если вы используете сигналы, вам нужно будет периодически запускать запрос, который синхронизирует сумму.