如何过滤多值字段

2024-10-02 18:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要按用户过滤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()]

以下是我用于发出搜索请求的视图集:

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方法不能正常工作,而且我的搜索结果总是空的。你知道吗


Tags: 用户模型selfgetindexmodelmodelsitems