|
7 | 7 | from rest_framework.request import Request |
8 | 8 | from rest_framework.response import Response |
9 | 9 | from rest_framework.viewsets import ModelViewSet |
10 | | -from django.shortcuts import render |
| 10 | +from django import forms |
11 | 11 | from django.db.models import Case, When |
12 | 12 |
|
| 13 | +from haystack.generic_views import SearchView |
| 14 | +from haystack.forms import SearchForm |
| 15 | + |
| 16 | +from apps.zoon.models import ZooniverseWorkflow |
| 17 | + |
13 | 18 | from .documents import DeedPageDocument |
14 | 19 | from .serializers import DeedPageSerializer |
15 | 20 | from .models import DeedPage |
@@ -184,3 +189,38 @@ def generate_search_query(self, search_terms_list: list[str], param_filters: dic |
184 | 189 | return query |
185 | 190 |
|
186 | 191 | return Q("match_all") |
| 192 | + |
| 193 | + |
| 194 | +# TODO: delete this once we have transitioned to elasticsearch |
| 195 | +class DeedSearchForm(SearchForm): |
| 196 | + bool_match = forms.BooleanField(required=False) |
| 197 | + workflow = forms.ModelChoiceField( |
| 198 | + queryset=ZooniverseWorkflow.objects.all(), |
| 199 | + to_field_name="workflow_name", |
| 200 | + required=False, |
| 201 | + ) |
| 202 | + |
| 203 | + def search(self): |
| 204 | + sqs = super().search() |
| 205 | + |
| 206 | + if not self.is_valid(): |
| 207 | + return self.no_query_found() |
| 208 | + |
| 209 | + if self.cleaned_data["workflow"]: |
| 210 | + sqs = sqs.filter(workflow=self.cleaned_data["workflow"]) |
| 211 | + |
| 212 | + if self.cleaned_data["bool_match"]: |
| 213 | + sqs = sqs.filter(bool_match=self.cleaned_data["bool_match"]) |
| 214 | + |
| 215 | + return sqs |
| 216 | + |
| 217 | + |
| 218 | +class DeedSearchView(SearchView): |
| 219 | + template_name = 'search/search.html' |
| 220 | + # queryset = SearchQuerySet().all() |
| 221 | + form_class = DeedSearchForm |
| 222 | + |
| 223 | + def get_context_data(self, **kwargs): |
| 224 | + data = super().get_context_data(**kwargs) |
| 225 | + data['all_workflows'] = ZooniverseWorkflow.objects.all() |
| 226 | + return data |
0 commit comments