title: django object is not JSON serializable error after upgrading django to 1.6.5
body: <p>I have a django app which was running on <code>1.4.2</code> version and working completely fine, but recently i updated it to django <code>1.6.5</code> and facing some wierd errors like below</p>
  
  <p>Actually i am getting this during user/client registration process in my site functionality</p>
  
  <pre><code>Request URL:    http://example.com/client/registration/
  Django Version:     1.6.5
  Exception Type:     TypeError
  Exception Value:    &lt;Client: test one&gt; is not JSON serializable
  Exception Location:     /usr/lib/python2.7/json/encoder.py in default, line 184
  Python Executable:  /home/user/.virtualenvs/test_proj/bin/python
  Python Version:     2.7.5
  </code></pre>
  
  <p><strong>traceback</strong></p>
  
  <pre><code>Traceback:
  File "/home/user/.virtualenvs/test_proj/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
    199.                 response = middleware_method(request, response)
  File "/home/user/.virtualenvs/test_proj/local/lib/python2.7/site-packages/django/contrib/sessions/middleware.py" in process_response
    38.                     request.session.save()
  File "/home/user/.virtualenvs/test_proj/local/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py" in save
    57.             session_data=self.encode(self._get_session(no_load=must_create)),
  File "/home/user/.virtualenvs/test_proj/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in encode
    87.         serialized = self.serializer().dumps(session_dict)
  File "/home/user/.virtualenvs/test_proj/local/lib/python2.7/site-packages/django/core/signing.py" in dumps
    88.         return json.dumps(obj, separators=(',', ':')).encode('latin-1')
  File "/usr/lib/python2.7/json/__init__.py" in dumps
    250.         sort_keys=sort_keys, **kw).encode(obj)
  File "/usr/lib/python2.7/json/encoder.py" in encode
    207.         chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py" in iterencode
    270.         return _iterencode(o, 0)
  File "/usr/lib/python2.7/json/encoder.py" in default
    184.         raise TypeError(repr(o) + " is not JSON serializable")
  
  Exception Type: TypeError at /client/registration/
  Exception Value: &lt;Client: test one&gt; is not JSON serializable
  </code></pre>
  
  <p>I am confused on why the above json error has been appearing after updation and by the way i am using a customized json field in some of my models as below</p>
  
  <p><strong>proj/utils.py</strong></p>
  
  <pre><code>from django.db import models
  from django.utils import simplejson as json
  from django.core.serializers.json import DjangoJSONEncoder
  
  
  class JSONField(models.TextField):
      '''JSONField is a generic textfield that neatly serializes/unserializes
      JSON objects seamlessly'''
  
      # Used so to_python() is called
      __metaclass__ = models.SubfieldBase
  
      def to_python(self, value):
          '''Convert our string value to JSON after we load it from the DB'''
          if value == '':
              return None
          try:
              if isinstance(value, basestring):
                  return json.loads(value)
          except ValueError:
              pass
          return value
  
      def get_db_prep_save(self, value, connection=None):
          '''Convert our JSON object to a string before we save'''
          if not value or value == '':
              return None
          if isinstance(value, (dict, list)):
              value = json.dumps(value, mimetype="application/json")
          return super(JSONField, self).get_db_prep_save(value, connection=connection)
  
  from south.modelsinspector import add_introspection_rules
  add_introspection_rules([], ["^proj\.util\.jsonfield\.JSONField"])
  </code></pre>
  
  <p><strong>settings.py</strong></p>
  
  <pre><code>SERIALIZATION_MODULES = {
       'custom_json': 'proj.util.json_serializer',
          }
  </code></pre>
  
  <p><strong>json_serializer.py</strong></p>
  
  <pre><code>from django.core.serializers.json import Serializer as JSONSerializer
  from django.utils.encoding import is_protected_type
  
  # JSONFields that are normally incorrectly serialized as strings
  json_fields = ['field_1', 'field_2']
  
  
  class Serializer(JSONSerializer):
      """
      A fix on JSONSerializer in order to prevent stringifying JSONField data.
      """
      def handle_field(self, obj, field):
          value = field._get_val_from_obj(obj)
          # Protected types (i.e., primitives like None, numbers, dates,
          # and Decimals) are passed through as is. All other values are
          # converted to string first.
          if is_protected_type(value) or field.name in json_fields:
              self._current[field.name] = value
          else:
              self._current[field.name] = field.value_to_string(obj)
  </code></pre>
  
  <p>So how to solve the above error ? can some one give me an explanation of what happening to cause the error ?</p>