У меня есть модель Notification
, в которой используются общие внешние ключи Django, чтобы я мог уведомлять пользователей.
class Notification(models.Model):
target_ct = models.ForeignKey(ContentType, on_delete=models.CASCADE)
target_id = models.CharField(max_length=36)
target = GenericForeignKey('target_ct', 'target_id')
target_user = models.ForeignKey(User, on_delete=models.CASCADE)
Я хочу удалить все связанные уведомления, когда объект, генерирующий такие уведомления, будет удален.
До сих пор я достиг этого, используя сигнал post_delete для каждой модели, например.
@receiver(post_delete, sender=Model1)
def delete(sender, instance, *args, **kwargs):
Notification.objects.filter(target_id=instance.id, target_ct=ContentType.objects.get_for_model(instance)).delete()
@receiver(post_delete, sender=Model2)
def delete(sender, instance, *args, **kwargs):
Notification.objects.filter(target_id=instance.id, target_ct=ContentType.objects.get_for_model(instance)).delete()
У меня около 20 моделей, есть ли способ генерировать сигнал post_delete, который работает для каждой модели?