Skip to content

Commit 77da4d2

Browse files
More sane defaults and error handling
1 parent 8a5c6ac commit 77da4d2

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

json_field/fields.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def __init__(self, *args, **kwargs):
7575
decoder_kwargs.update({'cls':decoder})
7676
self.encoder_kwargs = encoder_kwargs
7777
self.decoder_kwargs = decoder_kwargs
78-
kwargs['default'] = kwargs.get('default', {})
78+
kwargs['default'] = kwargs.get('default', {} if not kwargs.get('null') else None)
7979
kwargs['help_text'] = kwargs.get('help_text', self.default_error_messages['invalid'])
8080
super(JSONField, self).__init__(*args, **kwargs)
8181

@@ -88,14 +88,11 @@ def to_python(self, value):
8888
if not value:
8989
return None
9090
if isinstance(value, basestring):
91-
try:
92-
value = json.loads(value, **self.decoder_kwargs)
93-
except json.JSONDecodeError:
94-
pass
91+
value = json.loads(value, **self.decoder_kwargs)
9592
return value
9693

9794
def get_db_prep_value(self, value, *args, **kwargs):
98-
if value is None:
95+
if self.null and value is None and not kwargs.get('force'):
9996
return None
10097
return json.dumps(value, **self.encoder_kwargs)
10198

@@ -118,7 +115,7 @@ def contribute_to_class(self, cls, name):
118115
super(JSONField, self).contribute_to_class(cls, name)
119116

120117
def get_json(model_instance):
121-
return self.get_db_prep_value(getattr(model_instance, self.attname, None))
118+
return self.get_db_prep_value(getattr(model_instance, self.attname, None), force=True)
122119
setattr(cls, 'get_%s_json' % self.name, get_json)
123120

124121
def set_json(model_instance, value):

0 commit comments

Comments
 (0)