我有一个ListView,它将q GET参数用于搜索框。问题是,我没有遵循干原则,因为我有其他类似的搜索框。因此,我想做一个自定义的SearchMixin来处理搜索查询。我的ListView以前是这样的:
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:
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:
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
发布于 2019-11-04 04:27:33
这将不会调用search的get_queryset,因为它会被视图的get_queryset函数覆盖。您可以在mixin中更改get_queryset函数的名称,然后使用self在视图中调用该函数。
https://stackoverflow.com/questions/58687132
复制相似问题