<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def marshal_with_model(model, excludes=None, only=None, extends=None):
 """With this decorator, you can return ORM model instance, or ORM query in view function directly. We'll transform these objects to standard python data structures, like Flask-RESTFul's `marshal_with` decorator. And, you don't need define fields at all. You can specific columns to be returned, by `excludes` or `only` parameter. (Don't use these tow parameters at the same time, otherwise only `excludes` parameter will be used.) If you want return fields that outside of model, or overwrite the type of some fields, use `extends` parameter to specify them. Notice: this function only support `Flask-SQLAlchemy` Example: class Student(db.Model):
 id = Column(Integer, primary_key=True) name = Column(String(100)) age = Column(Integer) class SomeApi(Resource):
 @marshal_with_model(Student, excludes=['id']) def get(self):
 return Student.query # response: [{"name": "student_a", "age": "16"}, {"name": "student_b", "age": 18}] class AnotherApi(Resource):
 @marshal_with_model(Student, extends={"nice_guy": fields.Boolean, "age": fields.String}) def get(self):
 student = Student.query.get(1) student.nice_guy = True student.age = "young" if student.age < 18 else "old" # transform int field to string return student """

    if isinstance(excludes, six.string_types):
        excludes = [excludes]
    if excludes and only:
        only = None
    elif isinstance(only, six.string_types):
        only = [only]

    field_definition = {}
    for col in model.__table__.columns:
        if only:
            if col.name not in only:
                continue
        elif excludes and col.name in excludes:
                continue

        field_definition[col.name] = _type_map[col.type.python_type.__name__]

    if extends is not None:
        for k, v in extends.items():
            field_definition[k] = v

    def decorated(f):
        @wraps(f)
        @_marshal_with(field_definition)
        def wrapper(*args, **kwargs):
            result = f(*args, **kwargs)
            return result if not _fields.is_indexable_but_not_string(result) else [v for v in result]
        return wrapper
    return decorated