Skip to content

Commit f7529f2

Browse files
committed
Don't wrap INET None values
For Psycopg3 we wrap INET values as strings. This broke the handling of None values as it converted them to the invalid string "None". Now we simply pass None values as-is since all Psycopg versions know what to do with them, Fixes #128
1 parent af106a4 commit f7529f2

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

netfields/fields.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@ def get_prep_value(self, value):
9191
return str(self.to_python(value))
9292

9393
def get_db_prep_value(self, value, connection, prepared=False):
94-
# Django <= 1.8, ArrayField does not pass model to the base_field so we have to check for existance
95-
model = getattr(self, 'model', None)
96-
if model is None or model._meta.get_field(self.name).get_internal_type() == 'ArrayField':
94+
if value is None:
95+
return None
96+
97+
if self.model._meta.get_field(self.name).get_internal_type() == 'ArrayField':
9798
is_array_field = True
9899
else:
99100
is_array_field = False
@@ -205,9 +206,10 @@ def get_prep_value(self, value):
205206
return str(self.to_python(value))
206207

207208
def get_db_prep_value(self, value, connection, prepared=False):
208-
# Django <= 1.8, ArrayField does not pass model to the base_field so we have to check for existance
209-
model = getattr(self, 'model', None)
210-
if model is None or model._meta.get_field(self.name).get_internal_type() == 'ArrayField':
209+
if value is None:
210+
return None
211+
212+
if self.model._meta.get_field(self.name).get_internal_type() == 'ArrayField':
211213
is_array_field = True
212214
else:
213215
is_array_field = False
@@ -256,9 +258,10 @@ def get_prep_value(self, value):
256258
return str(self.to_python(value))
257259

258260
def get_db_prep_value(self, value, connection, prepared=False):
259-
# Django <= 1.8, ArrayField does not pass model to the base_field, so we have to check for existence
260-
model = getattr(self, 'model', None)
261-
if model is None or model._meta.get_field(self.name).get_internal_type() == 'ArrayField':
261+
if value is None:
262+
return None
263+
264+
if self.model._meta.get_field(self.name).get_internal_type() == 'ArrayField':
262265
is_array_field = True
263266
else:
264267
is_array_field = False

test/tests/test_sql_fields.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,9 @@ def test_save_single_item(self):
676676
def test_save_multiple_items(self):
677677
InetArrayTestModel(field=['10.1.1.1', '10.1.1.2']).save()
678678

679+
def test_save_with_null_item(self):
680+
InetArrayTestModel(field=['10.1.1.1', None]).save()
681+
679682
def test_retrieves_ipv4_ipinterface_type(self):
680683
instance = InetArrayTestModel(field=['10.1.1.1/24'])
681684
instance.save()
@@ -694,6 +697,9 @@ def test_save_single_item(self):
694697
def test_save_multiple_items(self):
695698
CidrArrayTestModel(field=['10.1.1.0/24', '10.1.2.0/24']).save()
696699

700+
def test_save_with_null_item(self):
701+
CidrArrayTestModel(field=['10.1.1.0/24', None]).save()
702+
697703
def test_retrieves_ipv4_ipnetwork_type(self):
698704
instance = CidrArrayTestModel(field=['10.1.1.0/24'])
699705
instance.save()
@@ -712,6 +718,9 @@ def test_save_single_item(self):
712718
def test_save_multiple_items(self):
713719
MACArrayTestModel(field=['00:aa:2b:c3:dd:44', '00:aa:2b:c3:dd:45']).save()
714720

721+
def test_save_with_null_item(self):
722+
MACArrayTestModel(field=['00:aa:2b:c3:dd:44', None]).save()
723+
715724
def test_retrieves_eui_type(self):
716725
instance = MACArrayTestModel(field=['00:aa:2b:c3:dd:44'])
717726
instance.save()
@@ -730,6 +739,9 @@ def test_save_single_item(self):
730739
def test_save_multiple_items(self):
731740
MAC8ArrayTestModel(field=['00:aa:2b:c3:dd:44:55:ff', '00:aa:2b:c3:dd:45:7e:6b']).save()
732741

742+
def test_save_with_null_item(self):
743+
MAC8ArrayTestModel(field=['00:aa:2b:c3:dd:44:55:ff', None]).save()
744+
733745
def test_retrieves_eui_type(self):
734746
instance = MAC8ArrayTestModel(field=['00:aa:2b:c3:dd:44:55:67'])
735747
instance.save()

0 commit comments

Comments
 (0)