title: Object of type 'User' is not JSON serializable (Parent class)
body: <p>I'm trying to insert a record in my database through my Flask API. The relationship between the User and Project classes is One to Many (a User can have many projects). I'm having no problems at inserting a new User, but when I try to insert a new Project in the database, it actually works, but the User attributte in the Project cant't be be converted to JSON. Here is my code:</p>
  
  <p>User Model file:</p>
  
  <pre><code>class Usuario(db.Model):
   id = db.Column(db.BigInteger, primary_key=True)
   login = db.Column(db.String(80), unique=True, nullable=False)
   email = db.Column(db.String(120), unique=True, nullable=False)
   nome = db.Column(db.String(80), nullable=False)
   senha = db.Column(db.String(80), nullable=False)
   telefone = db.Column(db.String(80))
   receivedNotification = db.Column(
      db.Boolean, default=False, nullable=False)
   receivedEmail = db.Column(db.Boolean, default=False, nullable=False)
   emailVerificated = db.Column(db.Boolean, default=False, nullable=False)
   imagem = db.Column(db.LargeBinary(length=(2 ** 32) - 1))
  
   def __init__(self, login='', email='', nome='', senha='',
               telefone='', received_notification=False,
               received_email=False, email_verificated=False, imagem=None, init_dict=None):
      if init_dict is None:
          self.login = login
          self.email = email
          self.nome = nome
          self.senha = senha
          self.telefone = telefone
          self.receivedNotification = received_notification
          self.receivedEmail = received_email
          self.emailVerificated = email_verificated
          self.imagem = imagem
      else:
          for key in init_dict:
              setattr(self, key, init_dict[key])
  class UsuarioSchema(ma.Schema):
  class Meta:
      fields = ('id', 'login', 'email', 'nome', 'telefone',
                'receivedNotification', 'receivedEmail', 'emailVerificated', 'imagem')
  
  user_schema = UsuarioSchema()
  users_schema = UsuarioSchema(many=True)
  </code></pre>
  
  <p>Project Model file:</p>
  
  <pre><code>class Projeto(db.Model):
    codigo = db.Column(db.BigInteger, primary_key=True)
    nome = db.Column(db.String(100))
    descricao = db.Column(db.String(200))
    dataCriacao = db.Column(db.Date)
    dataPrevFinalizacao = db.Column(db.Date)
    dataFinalizacao = db.Column(db.Date)
    usuarioAdmId = db.Column(db.BigInteger,
                           db.ForeignKey('usuario.id'), nullable=False)
    usuarioAdm = db.relationship('Usuario',
                               backref=db.backref('projetos', lazy=True))
  
    def __init__(self, nome, descricao, data_criacao,
               data_prev_finalizacao, usuario_adm_id, data_finalizacao=None):
      self.nome = nome
      self.descricao = descricao
      self.dataCriacao = data_criacao
      self.dataPrevFinalizacao = data_prev_finalizacao
      self.dataFinalizacao = data_finalizacao
      self.usuarioAdmId = usuario_adm_id
  
  class ProjetoSchema(ma.Schema):
  class Meta:
      fields = ('nome', 'descricao', 'dataCriacao',
                'dataPrevFinalizacao', 'dataFinalizacao', 'usuarioAdm')
  
  projeto_schema = ProjetoSchema()
  projetos_schema = ProjetoSchema(many=True)
  </code></pre>
  
  <p>My route code to add a project:</p>
  
  <pre><code>@projeto_controller.route(mapping, methods=['POST'])
  def add_projeto():
    nome = request.json['nome']
    descricao = request.json['descricao']
    data_criacao = request.json['dataCriacao']
    data_criacao = datetime.strptime(
      data_criacao, '%b %d, %Y %I:%M:%S %p').date()
    data_prev_finalizacao = request.json['dataPrevFinalizacao']
    data_prev_finalizacao = datetime.strptime(
      data_prev_finalizacao, '%b %d, %Y %I:%M:%S %p').date()
    usuario_adm_id = request.json['usuarioAdm']['id']
    usuario_adm = request.json['usuarioAdm']
  
    usuario = mUsuario.Usuario.query.get(usuario_adm_id)
    usuarioAdm = usuario
  
    new_projeto = mProjeto.Projeto(nome=nome, descricao=descricao,
                                 data_criacao=data_criacao,
  
    data_prev_finalizacao=data_prev_finalizacao,
                                 usuario_adm_id=usuario_adm_id)
  
    new_projeto.usuarioAdm = usuarioAdm
    usuarioAdm.projetos.append(new_projeto)
  
    db.session.commit()
    return mProjeto.projeto_schema.jsonify(new_projeto) 
  </code></pre>
  
  <p>Error message:</p>
  
  <pre><code>  File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 2309, in __call__
  return self.wsgi_app(environ, start_response)
   File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 2295, in wsgi_app
  response = self.handle_exception(e)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 1741, in handle_exception
  reraise(exc_type, exc_value, tb)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
  raise value
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
  response = self.full_dispatch_request()
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
  rv = self.handle_user_exception(e)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
  reraise(exc_type, exc_value, tb)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
  raise value
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
  rv = self.dispatch_request()
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
  return self.view_functions[rule.endpoint](**req.view_args)
    File "/Users/user/Python/KeepSoftPythonAPI/controller/ProjetoController.py", line 93, in add_projeto
  return mProjeto.projeto_schema.jsonify(new_projeto)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask_marshmallow/schema.py", line 42, in jsonify
  return flask.jsonify(data, *args, **kwargs)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/json/__init__.py", line 321, in jsonify
  dumps(data, indent=indent, separators=separators) + '\n',
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/json/__init__.py", line 179, in dumps
  rv = _json.dumps(obj, **kwargs)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/json/__init__.py", line 238, in dumps
  **kw).encode(obj)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/json/encoder.py", line 201, in encode
  chunks = list(chunks)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/json/encoder.py", line 431, in _iterencode
  yield from _iterencode_dict(o, _current_indent_level)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/json/encoder.py", line 405, in _iterencode_dict
  yield from chunks
    File "/anaconda3/envs/KeepSoft/lib/python3.7/json/encoder.py", line 438, in _iterencode
  o = _default(o)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/site-packages/flask/json/__init__.py", line 81, in default
  return _json.JSONEncoder.default(self, o)
    File "/anaconda3/envs/KeepSoft/lib/python3.7/json/encoder.py", line 179, in default
  raise TypeError(f'Object of type {o.__class__.__name__} '
    TypeError: Object of type Usuario is not JSON serializable
  </code></pre>
  
  <p>I expected the a Project JSON returned, so i can convert to the Project class that exists in my mobile application.</p>