from django.dispatch import receiver from django.db.models.signals import post_save from .models import IPPrefix, IPResource from ipaddress import ip_address, ip_network @receiver(post_save, sender=IPPrefix, dispatch_uid='ip_prefix') def ip_prefix(sender, instance, created, **kwargs): network = ip_network(instance.prefix) for ip in IPResource.objects.all(): address = ip_address(ip.ip) if address in network: ip.prefixes.add(instance) else: ip.prefixes.remove(instance) @receiver(post_save, sender=IPResource, dispatch_uid='ip_resource') def ip_resource(sender, instance, created, **kwargs): address = ip_address(instance.ip) for prefix in IPPrefix.objects.all(): network = ip_network(prefix.prefix) if address in network: instance.prefixes.add(prefix) else: instance.prefixes.remove(prefix)