Django - сигнал post_delete для каждой модели в моем приложении - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть модель 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, который работает для каждой модели?

...