'Compute the default columns for selecting every field in the base
model. Will sometimes be called to pull in related models (e.g. via
select_related), in which case "opts" and "start_alias" will be given
to provide a starting point for the traversal.
Return a list of strings, quoted appropriately for use in SQL
directly, as well as a set of aliases used in the select statement (if
\'as_pairs\' is True, return a list of (alias, col_name) pairs instead
of strings as the first component and None as the second component).'

def get_default_columns(self, start_alias=None, opts=None, from_parent=None):

    result = []
    if (opts is None):
        opts = self.query.get_meta()
    only_load = self.deferred_to_columns()
    if (not start_alias):
        start_alias = self.query.get_initial_alias()
    seen_models = {None: start_alias}
    for field in opts.concrete_fields:
        model = field.model._meta.concrete_model
        if (model == opts.model):
            model = None
        if (from_parent and (model is not None) and issubclass(from_parent._meta.concrete_model, model._meta.concrete_model)):
            continue
        if ((field.model in only_load) and (field.attname not in only_load[field.model])):
            continue
        alias = self.query.join_parent_model(opts, model, start_alias, seen_models)
        column = field.get_col(alias)
        result.append(column)
    return result
