diff --git a/djangosphinx/models.py b/djangosphinx/models.py index 5812ba1..fbfdd59 100644 --- a/djangosphinx/models.py +++ b/djangosphinx/models.py @@ -201,6 +201,7 @@ def __init__(self, model=None, using=None, **kwargs): self._excludes = {} self._extra = {} self._query = '' + self._select = '' self.__metadata = None self._offset = 0 self._limit = 20 @@ -236,6 +237,14 @@ def __repr__(self): else: return '<%s instance>' % (self.__class__.__name__,) + def __getstate__(self): + dict = self.__dict__.copy() + if self._result_cache: + dict['_result_cache'] = None + dict['_metadata'] = {} + dict['_SphinxQuerySet__metadata'] = {} + return dict + def __len__(self): return self.count() @@ -326,6 +335,9 @@ def geoanchor(self, lat_attr, lng_attr, lat, lng): assert sphinxapi.VER_COMMAND_SEARCH >= 0x113, "You must upgrade sphinxapi to version 0.98 to use Geo Anchoring." return self._clone(_anchor=(lat_attr, lng_attr, float(lat), float(lng))) + def select(self, select_str): + return self._clone(_select=select_str) + # this actually does nothing, its just a passthru to # keep things looking/working generally the same def all(self): @@ -406,6 +418,10 @@ def _clone(self, **kwargs): c.__dict__.update(self.__dict__.copy()) for k, v in kwargs.iteritems(): setattr(c, k, v) + # reset cached data + c._result_cache = None + c.__metadata = {} + c._SphinxQuerySet__metadata = {} return c def _sphinx(self): @@ -500,6 +516,9 @@ def _handle_filters(filter_list, exclude=False): if self._excludes: params.append('excludes=%s' % (self._excludes,)) _handle_filters(self._excludes, True) + + if self._select: + client.SetSelect(self._select) if self._groupby: params.append('groupby=%s' % (self._groupby,))