【问题标题】:Django haystack filtering by foreign key idDjango haystack 按外键 id 过滤
【发布时间】:2016-10-29 07:46:49
【问题描述】:

我想通过default_category.pk过滤我的搜索查询。

这是我的搜索索引:

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)。

【问题讨论】:

    标签: python django django-haystack


    【解决方案1】:

    解决方案非常明显。我使用了Simple 搜索后端。这是我在官方文档中找到的:

    这个后端不像其他后端那样工作。 数据准备什么都不做,高级过滤调用也不起作用。除非您处于只想让 Haystack 静音的环境中,否则您可能真的不想要这个。

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 2012-12-15
      • 1970-01-01
      • 2012-07-15
      • 2021-06-25
      • 2018-12-29
      • 2012-07-30
      • 2020-09-07
      • 2012-01-23
      相关资源
      最近更新 更多