mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 08:46:10 -06:00
6347 make signal handlers use partial funcs
This commit is contained in:
parent
9da067a8cd
commit
f75405c707
@ -1,5 +1,6 @@
|
|||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.db.models.signals import post_delete, post_save, pre_save
|
from django.db.models.signals import post_delete, post_save, pre_save
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
from .fields import CounterCacheField
|
from .fields import CounterCacheField
|
||||||
from .mixins import TrackingModelMixin
|
from .mixins import TrackingModelMixin
|
||||||
@ -7,6 +8,25 @@ from .mixins import TrackingModelMixin
|
|||||||
counters = {}
|
counters = {}
|
||||||
|
|
||||||
|
|
||||||
|
def post_save_receiver_counter(counter_instance, sender, instance, created, **kwargs):
|
||||||
|
if created:
|
||||||
|
counter_instance.adjust_count(counter_instance.parent_id(instance), 1)
|
||||||
|
return
|
||||||
|
|
||||||
|
# not created so check if field has changed
|
||||||
|
field_name = f"{counter_instance.foreign_key_field.name}_id"
|
||||||
|
if field_name in instance.tracker.changed:
|
||||||
|
new_value = getattr(instance, field_name, None)
|
||||||
|
old_value = instance.tracker.changed[field_name]
|
||||||
|
if (new_value is not None) and (new_value != old_value):
|
||||||
|
counter_instance.adjust_count(new_value, 1)
|
||||||
|
counter_instance.adjust_count(old_value, -1)
|
||||||
|
|
||||||
|
|
||||||
|
def post_delete_receiver_counter(counter_instance, sender, instance, **kwargs):
|
||||||
|
counter_instance.adjust_count(counter_instance.parent_id(instance), -1)
|
||||||
|
|
||||||
|
|
||||||
class Counter:
|
class Counter:
|
||||||
"""
|
"""
|
||||||
Used with CounterCacheField to add signals to track related model counts.
|
Used with CounterCacheField to add signals to track related model counts.
|
||||||
@ -47,29 +67,14 @@ class Counter:
|
|||||||
name = f"{self.parent_model._meta.model_name}.{self.child_model._meta.model_name}.{self.foreign_key_field.name}"
|
name = f"{self.parent_model._meta.model_name}.{self.child_model._meta.model_name}.{self.foreign_key_field.name}"
|
||||||
counted_name = f"{name}-{self.counter_name}"
|
counted_name = f"{name}-{self.counter_name}"
|
||||||
|
|
||||||
def post_save_receiver_counter(sender, instance, created, **kwargs):
|
post_save_receiver = partial(post_save_receiver_counter, counter_instance=self)
|
||||||
if created:
|
|
||||||
self.adjust_count(self.parent_id(instance), 1)
|
|
||||||
return
|
|
||||||
|
|
||||||
# not created so check if field has changed
|
|
||||||
field_name = f"{self.foreign_key_field.name}_id"
|
|
||||||
if field_name in instance.tracker.changed:
|
|
||||||
new_value = getattr(instance, field_name, None)
|
|
||||||
old_value = instance.tracker.changed[field_name]
|
|
||||||
if (new_value is not None) and (new_value != old_value):
|
|
||||||
self.adjust_count(new_value, 1)
|
|
||||||
self.adjust_count(old_value, -1)
|
|
||||||
|
|
||||||
post_save.connect(
|
post_save.connect(
|
||||||
post_save_receiver_counter, sender=self.child_model, weak=False, dispatch_uid=f'{counted_name}_post_save'
|
post_save_receiver, sender=self.child_model, weak=False, dispatch_uid=f'{counted_name}_post_save'
|
||||||
)
|
)
|
||||||
|
|
||||||
def post_delete_receiver_counter(sender, instance, **kwargs):
|
post_delete_receiver = partial(post_delete_receiver_counter, counter_instance=self)
|
||||||
self.adjust_count(self.parent_id(instance), -1)
|
|
||||||
|
|
||||||
post_delete.connect(
|
post_delete.connect(
|
||||||
post_delete_receiver_counter,
|
post_delete_receiver,
|
||||||
sender=self.child_model,
|
sender=self.child_model,
|
||||||
weak=False,
|
weak=False,
|
||||||
dispatch_uid=f'{counted_name}_post_delete',
|
dispatch_uid=f'{counted_name}_post_delete',
|
||||||
|
Loading…
Reference in New Issue
Block a user