首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建自定义搜索Mixin?

如何创建自定义搜索Mixin?
EN

Stack Overflow用户
提问于 2019-11-04 04:16:41
回答 1查看 450关注 0票数 0

我有一个ListView,它将q GET参数用于搜索框。问题是,我没有遵循原则,因为我有其他类似的搜索框。因此,我想做一个自定义的SearchMixin来处理搜索查询。我的ListView以前是这样的:

代码语言:javascript
复制
class MemoListView(LoginRequiredMixin, ListView):

    model = Memo
    template_name = 'memos/memos.html'
    context_object_name = 'memos'

    def get_queryset(self):
        query = self.request.GET.get('q')
        user_casino = self.request.user.casino
        user_emp_type = self.request.user.employee_type
        ordering = self.get_ordering()

        if query:
            object_list = Memo.objects.filter(
                casino=user_casino).filter(
                receiver=user_emp_type).filter(
                Q(title__icontains=query)
                | Q(content__icontains=query
                    )
            )
        else:
            object_list = Memo.objects.filter(
                casino=user_casino).filter(
                receiver=user_emp_type
            )
        return object_list

我正试图以这样的方式创建SearchMixin

代码语言:javascript
复制
class SearchMixin:

    def get_queryset(self):
        queryset = super(SearchMixin, self).get_queryset()
        query = self.request.GET.get('q')

        if query:
            print('yes')
            return queryset.filter(Q(title__icontains=query)
                                   | Q(content__icontains=query))
        print('no')
        return queryset

问题是,当我将查询添加到SearchMixin中时,它并没有命中MemoListView

代码语言:javascript
复制
class MemoListView(LoginRequiredMixin, SearchMixin, ListView):

    model = Memo
    template_name = 'memos/memos.html'
    context_object_name = 'memos'

    def get_queryset(self):
        user_casino = self.request.user.casino
        user_emp_type = self.request.user.employee_type
        ordering = self.get_ordering()

        object_list = Memo.objects.filter(
            casino=user_casino).filter(
            receiver=user_emp_type)

        return object_list

为什么搜索不通过SearchMixin

EN

回答 1

Stack Overflow用户

发布于 2019-11-04 04:27:33

这将不会调用search的get_queryset,因为它会被视图的get_queryset函数覆盖。您可以在mixin中更改get_queryset函数的名称,然后使用self在视图中调用该函数。

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

https://stackoverflow.com/questions/58687132

复制
相关文章

相似问题

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