我需要按用户过滤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
方法无法正常工作,而且我的搜索结果总是空洞。