我有模型时间,其中包含一个日期的时间。然后我有对象Person,它是Time模型中的ForeginKey字段。我正在索引Time对象,以确定Person是否在给定的时间空间内有时间。
我试图将此添加到索引,但在索引时,我收到错误:
def index_queryset(self, using=None):
return self.get_model().objects.all().distinct('person')
错误:
DatabaseError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
所以我只想展示人,而不是时间,但我认为我必须指数时间,所以我可以得到时间介于给定日期之间的人。
答案 0 :(得分:0)
试试这个:
def index_queryset(self, using=None):
return self.get_model().objects.all().order_by('person').distinct('person')
答案 1 :(得分:0)
以下是我在索引类中添加的方法:
def build_queryset(self, using=None, start_date=None, end_date=None):
"""
Get the default QuerySet to index when doing an index update.
Subclasses can override this method to take into account related
model modification times.
The default is to use ``SearchIndex.index_queryset`` and filter
based on ``SearchIndex.get_updated_field``
"""
extra_lookup_kwargs = {}
model = self.get_model()
updated_field = self.get_updated_field()
update_field_msg = ("No updated date field found for '%s' "
"- not restricting by age.") % model.__name__
if start_date:
if updated_field:
extra_lookup_kwargs['%s__gte' % updated_field] = start_date
else:
warnings.warn(update_field_msg)
if end_date:
if updated_field:
extra_lookup_kwargs['%s__lte' % updated_field] = end_date
else:
warnings.warn(update_field_msg)
index_qs = None
if hasattr(self, 'get_queryset'):
warnings.warn("'SearchIndex.get_queryset' was deprecated in Haystack v2. Please rename the method 'index_queryset'.")
index_qs = self.get_queryset()
else:
index_qs = self.index_queryset(using=using)
if not hasattr(index_qs, 'filter'):
raise ImproperlyConfigured("The '%r' class must return a 'QuerySet' in the 'index_queryset' method." % self)
# `.select_related()` seems like a good idea here but can fail on
# nullable `ForeignKey` as well as what seems like other cases.
return index_qs.filter(**extra_lookup_kwargs)#.order_by(model._meta.pk.name)
def index_queryset(self, using=None):
return self.get_model().objects.all().distinct('person').order_by('person')