@@ -75,7 +75,7 @@ def __init__(self, *args, **kwargs):
75
75
decoder_kwargs .update ({'cls' :decoder })
76
76
self .encoder_kwargs = encoder_kwargs
77
77
self .decoder_kwargs = decoder_kwargs
78
- kwargs ['default' ] = kwargs .get ('default' , {})
78
+ kwargs ['default' ] = kwargs .get ('default' , {} if not kwargs . get ( 'null' ) else None )
79
79
kwargs ['help_text' ] = kwargs .get ('help_text' , self .default_error_messages ['invalid' ])
80
80
super (JSONField , self ).__init__ (* args , ** kwargs )
81
81
@@ -88,14 +88,11 @@ def to_python(self, value):
88
88
if not value :
89
89
return None
90
90
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 )
95
92
return value
96
93
97
94
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' ) :
99
96
return None
100
97
return json .dumps (value , ** self .encoder_kwargs )
101
98
@@ -118,7 +115,7 @@ def contribute_to_class(self, cls, name):
118
115
super (JSONField , self ).contribute_to_class (cls , name )
119
116
120
117
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 )
122
119
setattr (cls , 'get_%s_json' % self .name , get_json )
123
120
124
121
def set_json (model_instance , value ):
0 commit comments