'Given any explicit fields to include and fields to exclude, add
additional fields based on the associated model.'

def get_fields(self, fields=None, excludes=None):

    final_fields = {}
    fields = (fields or [])
    excludes = (excludes or [])
    for f in self.model._meta.fields:
        if (f.name in self.fields):
            continue
        if (fields and (f.name not in fields)):
            continue
        if (excludes and (f.name in excludes)):
            continue
        if self.should_skip_field(f):
            continue
        index_field_class = index_field_from_django_field(f)
        kwargs = copy.copy(self.extra_field_kwargs)
        kwargs.update({u'model_attr': f.name})
        if (f.null is True):
            kwargs[u'null'] = True
        if f.has_default():
            kwargs[u'default'] = f.default
        final_fields[f.name] = index_field_class(**kwargs)
        final_fields[f.name].set_instance_name(self.get_index_fieldname(f))
    return final_fields
