Procházet zdrojové kódy

Remove dependency on RawSQL from IPAddress manager

Jeremy Stretch před 6 roky
rodič
revize
1130f6b9f0
2 změnil soubory, kde provedl 18 přidání a 3 odebrání
  1. 15 1
      netbox/ipam/lookups.py
  2. 3 2
      netbox/ipam/managers.py

+ 15 - 1
netbox/ipam/lookups.py

@@ -154,10 +154,24 @@ class NetHostContained(Lookup):
         return 'CAST(HOST(%s) AS INET) << %s' % (lhs, rhs), params
         return 'CAST(HOST(%s) AS INET) << %s' % (lhs, rhs), params
 
 
 
 
+#
+# Transforms
+#
+
 class NetMaskLength(Transform):
 class NetMaskLength(Transform):
-    lookup_name = 'net_mask_length'
     function = 'MASKLEN'
     function = 'MASKLEN'
+    lookup_name = 'net_mask_length'
 
 
     @property
     @property
     def output_field(self):
     def output_field(self):
         return IntegerField()
         return IntegerField()
+
+
+class Host(Transform):
+    function = 'HOST'
+    lookup_name = 'host'
+
+
+class Inet(Transform):
+    function = 'INET'
+    lookup_name = 'inet'

+ 3 - 2
netbox/ipam/managers.py

@@ -1,5 +1,6 @@
 from django.db import models
 from django.db import models
-from django.db.models.expressions import RawSQL
+
+from ipam.lookups import Host, Inet
 
 
 
 
 class IPAddressManager(models.Manager):
 class IPAddressManager(models.Manager):
@@ -13,4 +14,4 @@ class IPAddressManager(models.Manager):
         IP address as a /32 or /128.
         IP address as a /32 or /128.
         """
         """
         qs = super().get_queryset()
         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')))