<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def make_request_parser(model_or_inst, excludes=None, only=None, for_populate=False):
 """Pass a `model class` or `model instance` to this function, then, it will generate a `RequestParser` that extract user request data from `request.json` according to the model class's definition. Parameter `excludes` and `only` can be `str` or list of `str`, then are used to specify which columns should be handled. If you passed `excludes` and `only` at same time, only `excludes` will be used. And, the primary key of the model will not be added to `RequestParser`'s argument list, unless you explicitly specify it use `only` parameter. If you pass in a model class, but not a model instance, the function will doing `required` checking, for columns that nullable=False. (If you pass in a model instance, the `required` checking will not proceed. Because in this situation, we should allow the user to ignore the assignment to a field) """

    is_inst = _is_inst(model_or_inst)

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

    parser = RequestPopulator() if for_populate else reqparse.RequestParser()
    for col in model_or_inst.__table__.columns:
        if only:
            if col.name not in only:
                continue
        elif (excludes and col.name in excludes) or col.primary_key:
                continue

        col_type = col.type.python_type
        kwargs = {
            "type": _type_dict.get(col_type.__name__, col_type) if hasattr(col_type, '__name__') else col_type
        }
        # When the context was to creating a new model instance, if a field has no default value, and is not nullable,
        #  mark it's corresponding argument as `required`.
        # 创建新数据库实例时，若一个字段既没有默认值，又不允许 NULL，则把它对应 arg 设为 required
        if not is_inst and col.default is None and col.server_default is None and not col.nullable:
            kwargs["required"] = True
        parser.add_argument(col.name, **kwargs)
    return parser