'Constructs the field_names list that the values query will be
retrieving.
Called by the _clone() method after initializing the rest of the
instance.'

def _setup_query(self):

    self.query.clear_deferred_loading()
    self.query.clear_select_fields()
    if self._fields:
        self.extra_names = []
        self.aggregate_names = []
        if ((not self.query.extra) and (not self.query.aggregates)):
            self.field_names = list(self._fields)
        else:
            self.query.default_cols = False
            self.field_names = []
            for f in self._fields:
                if (f in self.query.extra):
                    self.extra_names.append(f)
                elif (f in self.query.aggregate_select):
                    self.aggregate_names.append(f)
                else:
                    self.field_names.append(f)
    else:
        self.extra_names = None
        self.field_names = [f.attname for f in self.model._meta.concrete_fields]
        self.aggregate_names = None
    self.query.select = []
    if (self.extra_names is not None):
        self.query.set_extra_mask(self.extra_names)
    self.query.add_fields(self.field_names, True)
    if (self.aggregate_names is not None):
        self.query.set_aggregate_mask(self.aggregate_names)
