Django rest framework 按当前用户筛选drf haystack结果

Django rest framework 按当前用户筛选drf haystack结果,django-rest-framework,django-haystack,searchqueryset,Django Rest Framework,Django Haystack,Searchqueryset,我目前正在使用Django 1.10.3、Django haystack搜索引擎和elasticsearch后端以及drf haystack来证明这些观点 搜索一般来说都很好,但我完全无法按当前用户筛选结果 索引为: class SectionIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.EdgeNgramField(document=True, use_template=True, template_name

我目前正在使用Django 1.10.3、Django haystack搜索引擎和elasticsearch后端以及drf haystack来证明这些观点

搜索一般来说都很好,但我完全无法按当前用户筛选结果

索引为:

class SectionIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True, template_name="indexes/structure_text.txt")
    pkey = indexes.IntegerField(model_attr='pk')
    title = indexes.CharField()
对于视图(还包括HaystackSerializer,但它是通用的,不值得包含)

最后,过滤器:

class SectionFilter(HaystackFilter):
    mine = django_filters.MethodFilter(action='get_mine')

    class Meta:
        model = Section
        fields = ['mine']

    def get_mine(self, queryset, value):
        try:
            teacher = self.request.user.teacherprofile
            return queryset.filter(supervisors=teacher)
        except:
            return queryset
Section有一个带有teacherprofiles的M2M字段,我基本上希望确保结果只包含教师所在的部分

此实现返回所有匹配的查询,但忽略筛选条件,不会引发任何类型的错误


我得到的“最佳”结果是试图在视图中弄乱filter_queryset,在queryset中添加一个.filter(supervisors=teacher),但这会返回所有以老师为主管的部分,以及与查询匹配的所有课程,而不管是否为主管

因此,在一天结束时,我最终使用了一个SearchQuerySet来返回课程的结果,然后将结果转换为一个列表,并在没有老师监督的情况下删除项目

这可能不是最有效的方法,而且我无法让它单独在Haystack中工作(即使使用带有过滤器和(名称、主管)条件的SQS),但它可以工作,并且在性能方面仍然表现得非常好

class SectionFilter(HaystackFilter):
    mine = django_filters.MethodFilter(action='get_mine')

    class Meta:
        model = Section
        fields = ['mine']

    def get_mine(self, queryset, value):
        try:
            teacher = self.request.user.teacherprofile
            return queryset.filter(supervisors=teacher)
        except:
            return queryset