code: def _use_for_model(self, model):
          
          original_database = getattr(model, 'database', None)
  
          def get_models(model):
              """
              Return the model and all its submodels that are on the same database
              """
              model_database = getattr(model, 'database', None)
              if model_database == self:
                  return []
              models = [model]
              for submodel in model.__subclasses__():
                  if getattr(submodel, 'database', None) == model_database:
                      models += get_models(submodel)
              return models
  
          # put the model and all its matching submodels on the new database
          models = get_models(model)
          for _model in models:
              if not _model.abstract:
                  self._add_model(_model)
                  del original_database._models[_model._name]
              _model.database = self
  
          # return updated models
          return models
docs: Update the given model to use the current database. Do it also for all
          of its subclasses if they share the same database. (so it's easy to
          call use_database on an abstract model to use the new database for all
          subclasses)