title: TypeError: <object> is not JSON serializable
body: <p>I am trying to encode an object into json using <code>json.dumps()</code> in Django, however when I pass in a python object, it raises this error. </p>
  
  <pre><code>TypeError: &lt;OrgInvite: OrgInvite object&gt; is not JSON serializable
  </code></pre>
  
  <p>I was under the assumption that even though JSON can only encode certain data types, one of those data types were objects. I read another question on Stack Overflow that a good way to get around this is by creating a dictionary out of the object using <code>.__dict__</code> I tried this and it is saying that one of the keys in my new dictionary, _state is not serializable. I am not sure where this _state key came from, and was wondering is there a way to convert my object into a dictionary without that extra field, so I can encode it into JSON ?</p>
  
  <p>model:</p>
  
  <pre><code>class OrgInvite(models.Model):
      token = models.CharField(max_length=16, unique=True, null=False)
      account_id = models.ForeignKey(Account, on_delete=models.CASCADE, null=False)
      org_id = models.ForeignKey(Org, on_delete=models.CASCADE, null=False)
      used = models.BooleanField(default=False)
      is_admin = models.BooleanField(default=False)
      name = models.CharField(max_length=70)
      email = models.CharField(max_length=255)
  </code></pre>
  
  <p>view: </p>
  
  <pre><code>def get_invite(token):
      if not token:
          raise Exception("Invitation token is not specified")
  
      invitation = OrgInvite.objects.get(token=token)
      if not invitation:
          raise Exception("Invitation token is invalid.")
  
      return invitation
  
  def invite_accept_redirect(token):
      # """ -Redirects to the accept invite frontend view with pre-fetched data. """
  
      try:
          invite = get_invite(token)
          if not invite:
              raise Exception("Invitation token is invalid")
          if invite.used:
              invite = {'used': True}
      except:
          invite = {'invalid': True}
          raise Exception("Resource not found.")
  
      base = "home/accept"
  
      url = '{}/{}?data={}'.format(base, token, urllib.quote_plus(json.dumps(invite.__dict__)))
  
      return redirect(url)
  </code></pre>
  
  <p>console:</p>
  
  <pre><code>&gt;&gt;&gt; oi = OrgInvite.objects.get(token=100) 
  &gt;&gt;&gt; oi
  &lt;OrgInvite: OrgInvite object&gt;
  &gt;&gt;&gt; oix = oi.__dict__
  &gt;&gt;&gt; oix
  {'used': False, 'name': u'', '_state': &lt;django.db.models.base.ModelState object at 0x10377a610&gt;, 'email': u'', 'token': u'100', 'org_id_id': 101, 'account_id_id': 301, 'is_admin': False, 'id': 1}
  &gt;&gt;&gt; json.dumps(oix)
  Traceback (most recent call last):
    File "&lt;console&gt;", line 1, in &lt;module&gt;
    File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 244, in dumps
      return _default_encoder.encode(obj)
    File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
      chunks = self.iterencode(o, _one_shot=True)
    File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
      return _iterencode(o, 0)
    File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default
      raise TypeError(repr(o) + " is not JSON serializable")
  TypeError: &lt;django.db.models.base.ModelState object at 0x10377a610&gt; is not JSON serializable
  </code></pre>