У меня есть ListView
, который использует параметр q
GET
для окна поиска. Проблема в том, что я не следую принципу DRY , так как у меня есть другие похожие окна поиска. Поэтому я хотел бы сделать пользовательский 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
?