mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-09 00:58:16 -06:00
Optimize subscriber notifications
This commit is contained in:
parent
9f6ccec1ea
commit
2bc7b208f1
@ -294,24 +294,21 @@ def notify_object_changed(sender, instance, created, raw, **kwargs):
|
|||||||
if created or raw:
|
if created or raw:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Skip unsupported object types
|
||||||
ct = ContentType.objects.get_for_model(instance)
|
ct = ContentType.objects.get_for_model(instance)
|
||||||
if ct.model not in registry['model_features']['notifications'].get(ct.app_label, []):
|
if ct.model not in registry['model_features']['notifications'].get(ct.app_label, []):
|
||||||
return
|
return
|
||||||
|
|
||||||
# Find any Subscriptions for supported objects
|
# Find all subscribed Users
|
||||||
subscriptions = Subscription.objects.filter(object_type=ct, object_id=instance.pk).values('user')
|
subscribed_users = Subscription.objects.filter(object_type=ct, object_id=instance.pk).values_list('user', flat=True)
|
||||||
|
if not subscribed_users:
|
||||||
|
return
|
||||||
|
|
||||||
# Delete any existing Notifications for the object
|
# Delete any existing Notifications for the object
|
||||||
subscribed_users = [sub['user'] for sub in subscriptions]
|
|
||||||
Notification.objects.filter(object_type=ct, object_id=instance.pk, user__in=subscribed_users).delete()
|
Notification.objects.filter(object_type=ct, object_id=instance.pk, user__in=subscribed_users).delete()
|
||||||
|
|
||||||
# Create Notifications for Subscribers
|
# Create Notifications for Subscribers
|
||||||
notifications = [
|
Notification.objects.bulk_create([
|
||||||
Notification(
|
Notification(user_id=user, object=instance, event_name=OBJECT_UPDATED)
|
||||||
user_id=sub['user'],
|
for user in subscribed_users
|
||||||
object=instance,
|
])
|
||||||
event_name=OBJECT_UPDATED
|
|
||||||
)
|
|
||||||
for sub in subscriptions
|
|
||||||
]
|
|
||||||
Notification.objects.bulk_create(notifications)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user