Django m2m signal not saving data on DB

32 Views Asked by At

I am trying to use m2m signals to copy some data from a M2M field to another if a conditional is met. From logs I can see that the signal works as expected but when I query the DB I do not see any data - while I would expect to see the same as I see in the logs.

models.py

    class NatObjectLocal(PrimaryModel):
    """NAT Object Local model implementation."""

    nat_type = models.CharField(max_length=200, choices=NatTypes, verbose_name="Local NAT")
    real_ip = models.ManyToManyField(
        to="ipam.IPAddress",
        related_name="real_ips_local",
    )
    local_routable_ip = models.ManyToManyField(
        to="ipam.IPAddress",
        related_name="routable_ips_local",
    )

@receiver(m2m_changed, sender=NatObjectLocal.real_ip.through)
def copy_real_ip(sender, instance, action, **kwargs):
    if action == "post_add":
        if instance.nat_type == NatTypes.ECN:
            instance.local_routable_ip.clear()
            real_ips = instance.real_ip.all()
            print(f"real_ips: {real_ips}")
            instance.local_routable_ip.add(*real_ips)
            instance.save()
            print(f"instance.local_routable_ip.all(): {instance.local_routable_ip.all()}")

debug output

 real_ips: <IPAddressQuerySet [<IPAddress: 10.0.0.1/32>]>
 instance.local_routable_ip.all(): <IPAddressQuerySet [<IPAddress: 10.0.0.1/32>]>

ORM output

In [16]: related_objects = a.real_ip.all()

In [17]: related_objects
Out[17]: <IPAddressQuerySet [<IPAddress: 10.0.0.1/32>]>

In [18]: related_objects_2 = a.local_routable_ip.all()

In [19]: related_objects_2
Out[19]: <IPAddressQuerySet []>
0

There are 0 best solutions below