我想按default_category.pk
过滤我的搜索查询。
这是我的SearchIndex:
class ProductIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
content_auto = indexes.EdgeNgramField(model_attr='content')
default_category = indexes.IntegerField()
def get_model(self):
return Product
def index_queryset(self, using=None):
return self.get_model().objects.all()
我试过了两次
default_category = indexes.IntegerField(model_attr='default_category__pk')
和
def prepare_default_category(self, obj):
return obj.default_category.pk
这是我的观看代码
products = SearchQuerySet().models(Product).filter(content=auto_query, default_category=category_id)
但是这个查询集是空的。如果我从过滤器中删除default_category=category_id
,则列表不为空。如果我尝试查看dir(products[0])
,则有
[…, amount', 'app_label', 'brand', 'category_id', 'content_type', 'default_category_id', 'description', 'distance', 'get_additional_fields', 'get_stored_fields', 'id', 'log', 'model', 'model_name', 'object', 'pk', 'price', 'sale', 'score', 'searchindex', 'shop_id', 'stored_fields', 'title', 'verbose_name', 'verbose_name_plural']
所以这里有一些字段,那些在SearchIndex和字段default_category_id
中没有描述的字段(我不知道,它来自哪里,似乎总是None
)。
我在这里做错了什么?也许我需要在product_text.txt
写一些东西,或者我不明白一些重要的东西?
我使用的是django-1.9.8,而haystack版本是(2, 5, 0)
。
答案 0 :(得分:0)
解决方案非常明显。我使用Simple
搜索后端。这就是我在官方文档中找到的内容:
此后端不像其他后端那样工作。 数据准备什么都不做& 高级过滤调用不起作用。除非你处在一个你想让Haystack沉默的环境中,否则你可能真的不希望这样。