首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按当前用户过滤drf-haystack结果

按当前用户过滤drf-haystack结果
EN

Stack Overflow用户
提问于 2016-11-17 01:42:10
回答 1查看 550关注 0票数 1

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

搜索一般都很棒,但我完全无法按当前用户过滤结果。

索引是:

代码语言:javascript
复制
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,但它是通用的,不值得包含)。

代码语言:javascript
复制
class SectionSearchView(HaystackViewSet):
    index_models = [Section]
    serializer_class = SectionViewSerializer
    pagination_class = None
    filter_backend = SectionFilter

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def filter_queryset(self, queryset):
        queryset = super(HaystackGenericAPIView, self).filter_queryset(queryset)
        return queryset.using('section')

最后是过滤器:

代码语言:javascript
复制
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

部分有一个带有教师配置文件的M2M字段,我基本上想确保结果只包含教师在主管中的部分。

此实现返回所有匹配的查询,但忽略过滤条件,不会抛出任何类型的错误。

我得到的“最好”结果是尝试在视图中处理filter_queryset,向查询集中添加一个.filter(supervisors=teacher),但这会返回教师作为主管的所有部分,以及与查询匹配的所有课程,而不管主管状态如何。

EN

回答 1

Stack Overflow用户

发布于 2016-11-19 00:02:42

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

这可能不是最有效的方式,而且我不能让它单独在Haystack中工作(即使使用带有filter_and(名称,主管)条件的SQS ),但它可以工作,并且在性能方面仍然表现得足够好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40638779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档