Browse Source

Fix net_contained lookups on InetAddressField. Argument will be a CIDR

James Oakley 12 years ago
parent
commit
64922cc39a
2 changed files with 11 additions and 9 deletions
  1. 3 0
      netfields/fields.py
  2. 8 9
      netfields/tests.py

+ 3 - 0
netfields/fields.py

@@ -26,6 +26,9 @@ class _NetAddressField(models.Field):
 
         if (lookup_type in NET_OPERATORS and
                 NET_OPERATORS[lookup_type] not in NET_TEXT_OPERATORS):
+            if lookup_type.startswith('net_contained') and value is not None:
+                # Argument will be CIDR
+                return unicode(value)
             return self.get_prep_value(value)
 
         return super(_NetAddressField, self).get_prep_lookup(

+ 8 - 9
netfields/tests.py

@@ -91,6 +91,14 @@ class BaseInetTestCase(BaseSqlTestCase):
     def test_day_lookup_fails(self):
         self.assertSqlRaises(self.qs.filter(field__day=1), ValueError)
 
+    def test_net_contained(self):
+        self.assertSqlEquals(self.qs.filter(field__net_contained='10.0.0.1/24'),
+            self.select + 'WHERE "table"."field" << %s ')
+
+    def test_net_contained_or_equals(self):
+        self.assertSqlEquals(self.qs.filter(field__net_contained_or_equal='10.0.0.1/24'),
+            self.select + 'WHERE "table"."field" <<= %s ')
+
 
 class BaseInetFieldTestCase(BaseInetTestCase):
     value1 = '10.0.0.1'
@@ -159,15 +167,6 @@ class BaseCidrFieldTestCase(BaseInetTestCase):
         self.assertSqlEquals(self.qs.filter(field__net_contains_or_equals='10.0.0.1'),
             self.select + 'WHERE "table"."field" >>= %s ')
 
-    def test_net_contained(self):
-        self.assertSqlEquals(self.qs.filter(field__net_contained='10.0.0.1'),
-            self.select + 'WHERE "table"."field" << %s ')
-
-    def test_net_contained_or_equals(self):
-        self.assertSqlEquals(self.qs.filter(field__net_contained_or_equal='10.0.0.1'),
-            self.select + 'WHERE "table"."field" <<= %s ')
-
-
 
 class TestInetField(BaseInetFieldTestCase, TestCase):
     def setUp(self):