'Computes 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.
Returns 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, returns 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, with_aliases=False, col_aliases=None, start_alias=None, opts=None, as_pairs=False, local_only=False):

    result = []
    if (opts is None):
        opts = self.query.model._meta
    qn = self.quote_name_unless_alias
    qn2 = self.connection.ops.quote_name
    aliases = set()
    only_load = self.deferred_to_columns()
    proxied_model = get_proxied_model(opts)
    if start_alias:
        seen = {None: start_alias}
    for (field, model) in opts.get_fields_with_model():
        if (local_only and (model is not None)):
            continue
        if start_alias:
            try:
                alias = seen[model]
            except KeyError:
                if (model is proxied_model):
                    alias = start_alias
                else:
                    link_field = opts.get_ancestor_link(model)
                    alias = self.query.join((start_alias, model._meta.db_table, link_field.column, model._meta.pk.column))
                seen[model] = alias
        else:
            alias = self.query.included_inherited_models[model]
        table = self.query.alias_map[alias][TABLE_NAME]
        if ((table in only_load) and (field.column not in only_load[table])):
            continue
        if as_pairs:
            result.append((alias, field.column))
            aliases.add(alias)
            continue
        if (with_aliases and (field.column in col_aliases)):
            c_alias = ('Col%d' % len(col_aliases))
            result.append(('%s.%s    AS    %s' % (qn(alias), qn2(field.column), c_alias)))
            col_aliases.add(c_alias)
            aliases.add(c_alias)
        else:
            r = ('%s.%s' % (qn(alias), qn2(field.column)))
            result.append(r)
            aliases.add(r)
            if with_aliases:
                col_aliases.add(field.column)
    return (result, aliases)
