diff --git a/netbox/ipam/lookups.py b/netbox/ipam/lookups.py index 62b356c5d..92fa5780d 100644 --- a/netbox/ipam/lookups.py +++ b/netbox/ipam/lookups.py @@ -154,10 +154,24 @@ class NetHostContained(Lookup): return 'CAST(HOST(%s) AS INET) << %s' % (lhs, rhs), params +# +# Transforms +# + class NetMaskLength(Transform): - lookup_name = 'net_mask_length' function = 'MASKLEN' + lookup_name = 'net_mask_length' @property def output_field(self): return IntegerField() + + +class Host(Transform): + function = 'HOST' + lookup_name = 'host' + + +class Inet(Transform): + function = 'INET' + lookup_name = 'inet' diff --git a/netbox/ipam/managers.py b/netbox/ipam/managers.py index 8aebc60ce..8279bf205 100644 --- a/netbox/ipam/managers.py +++ b/netbox/ipam/managers.py @@ -1,5 +1,6 @@ from django.db import models -from django.db.models.expressions import RawSQL + +from ipam.lookups import Host, Inet class IPAddressManager(models.Manager): @@ -13,4 +14,4 @@ class IPAddressManager(models.Manager): IP address as a /32 or /128. """ qs = super().get_queryset() - return qs.annotate(host=RawSQL('INET(HOST(ipam_ipaddress.address))', [])).order_by('family', 'host') + return qs.order_by('family', Inet(Host('address')))