如何过滤MultiValueField

时间:2017-07-22 21:37:29

标签: python django django-haystack

我需要按用户过滤SearchQuerySet,以便仅显示与当前用户相关的对象。

我有一个模型通过反向FK连接到另一个模型:

class ItemList(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField(max_length=500)

class Item(models.Model):
    user = models.ForeignKey(User, related_name='items')
    list = models.ForeignKey(ItemList, related_name='items')

在这里我有索引:

class ItemListIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    users = indexes.MultiValueField()

    def prepare_users(self, obj):
        return [item.user.pk for item in obj.items.all()]

这是我用来发出搜索请求的ViewSet:

class ItemListSearchViewSet(HaystackViewSet):
    index_models = [ItemList]
    serializer_class = ItemListHaystackSerializer
    filter_backends = [HaystackFilter]
    pagination_class = SmallResultsSetPagination

    def get_queryset(self, index_models=[]):
        qs = super(ItemListSearchViewSet, self).get_queryset(index_models)
        qs = qs.filter(users__in=[self.request.user.pk])
        return qs

我无法弄明白,这就是为什么这个get_queryset方法无法正常工作,而且我的搜索结果总是空洞。

0 个答案:

没有答案