我有一个用户配置文件搜索索引,如下所示:
class UserProfileIndex(SearchIndex, Indexable):
text = CharField(document=True, use_template=True)
last_name = CharField(model_attr='last_name', indexed=True)
country = CharField(model_attr='country')
sectors = CharField(use_template=True)
services = CharField(use_template=True)
def get_model(self):
return UserProfile
def index_queryset(self, using=None):
"""
Used when the entire index for model is updated."""
return self.get_model().public.all()
我正在尝试使用以下命令按last_name字段排序:
s = SearchQuerySet().all().order_by('last_name')
然后我回来了:
Exception: No column for field 'last_name'
我在该字段上做过滤器没有问题。
s = SearchQuerySet().filter(last_name='Smith')
工作正常。
我猜这是一个 Whoosh 问题,但我似乎找不到解决方法。
不确定您是否已经解决了这个问题,但为了遇到此问题的其他人,我遇到了同样的问题并刚刚弄清楚了。
如果您在 Haystack 中的字段上使用 order_by,并且 Whoosh 是您的后端,那么您排序的字段必须存在于您的所有索引中。不仅仅是您感兴趣的那个。筛选器不受此相同要求的影响,这就是该查询通过的原因。