--- a/src/iconolab/search_indexes/forms.py Thu May 18 12:21:06 2017 +0200
+++ b/src/iconolab/search_indexes/forms.py Fri May 19 15:39:00 2017 +0200
@@ -7,46 +7,46 @@
class IconolabSearchForm(SearchForm):
- model_type = forms.ChoiceField(required=False, choices=(("images","Images"), ("annotations","Annotations")) )
-
- def __init__(self, *args, **kwargs):
- self.collection_name = kwargs.pop("collection_name")
- if self.collection_name and Collection.objects.filter(name=self.collection_name).exists():
- self.collection = Collection.objects.get(name=self.collection_name)
- selected_model_type = kwargs.pop("model_type", None)
+ model_type = forms.ChoiceField(required=False, choices=(("images","Images"), ("annotations","Annotations")) )
+
+ def __init__(self, *args, **kwargs):
+ self.collection_name = kwargs.pop("collection_name")
+ if self.collection_name and Collection.objects.filter(name=self.collection_name).exists():
+ self.collection = Collection.objects.get(name=self.collection_name)
+ selected_model_type = kwargs.pop("model_type", None)
- if selected_model_type is not None:
- data = kwargs.get("data", None)
- if data:
- data = data.copy()
- data["model_type"] = selected_model_type
- kwargs['data'] = data
+ if selected_model_type is not None:
+ data = kwargs.get("data", None)
+ if data:
+ data = data.copy()
+ data["model_type"] = selected_model_type
+ kwargs['data'] = data
+
+ super(IconolabSearchForm, self).__init__(*args, **kwargs)
- super(IconolabSearchForm, self).__init__(*args, **kwargs)
-
- def no_query_found(self):
- # load all
- selected_type = self.cleaned_data.get("model_type")
- qs = self.get_model_type_queryset(self.searchqueryset, selected_type).load_all()
- return qs
+ def no_query_found(self):
+ # load all
+ selected_type = self.cleaned_data.get("model_type")
+ qs = self.get_model_type_queryset(self.searchqueryset, selected_type).load_all()
+ return qs
+
+ def get_model_type_queryset(self, qs, model_type):
+
+ if model_type == 'images':
+ qs = qs.models(Item).load_all_queryset(Item, Item.objects.select_related('collection', 'metadatas'))
+ if model_type == 'annotations':
+ qs = qs.models(Annotation).load_all_queryset(Annotation, Annotation.objects.select_related('image', 'image__item', 'image__item__collection', 'stats', 'current_revision', 'author'))
- def get_model_type_queryset(self, qs, model_type):
-
- if model_type == 'images':
- qs = qs.models(Item).load_all_queryset(Item, Item.objects.select_related('collection', 'metadatas'))
- if model_type == 'annotations':
- qs = qs.models(Annotation).load_all_queryset(Annotation, Annotation.objects.select_related('image', 'image__item', 'image__item__collection', 'stats', 'current_revision', 'author'))
-
- if self.collection_name is not None:
- qs = qs.filter(collection = self.collection_name)
+ if self.collection_name is not None:
+ qs = qs.filter(collection = self.collection_name)
+
+ return qs
- return qs
-
- def search(self):
- selected_type = self.cleaned_data.get("model_type")
- qs = super(IconolabSearchForm, self).search()
- if qs.count() == 0:
- return qs
- else:
- qs = self.get_model_type_queryset(qs, selected_type).load_all()
- return qs
\ No newline at end of file
+ def search(self):
+ selected_type = self.cleaned_data.get("model_type")
+ qs = super(IconolabSearchForm, self).search()
+ if qs.count() == 0:
+ return qs
+ else:
+ qs = self.get_model_type_queryset(qs, selected_type).load_all()
+ return qs
--- a/src/iconolab/search_indexes/views.py Thu May 18 12:21:06 2017 +0200
+++ b/src/iconolab/search_indexes/views.py Fri May 19 15:39:00 2017 +0200
@@ -8,88 +8,86 @@
#override Search and Related QuerySet here
class IconolabSearchView(SearchView):
- form_class = IconolabSearchForm
- queryset = RelatedSearchQuerySet()
- template_name = "search/default_search.html"
- load_all = True
+ form_class = IconolabSearchForm
+ queryset = RelatedSearchQuerySet()
+ template_name = "search/default_search.html"
+ load_all = True
- templates_map = {
- "images": "search/image_search.html",
- "annotations": "search/annotation_search.html"
- }
+ templates_map = {
+ "images": "search/image_search.html",
+ "annotations": "search/annotation_search.html"
+ }
- def complete_url(self, url):
- query = self.request.GET.get("q", None)
- page = self.request.GET.get("page", None)
+ def complete_url(self, url):
+ query = self.request.GET.get("q", None)
+ page = self.request.GET.get("page", None)
- queryargs = []
- query_string = ""
+ queryargs = []
+ query_string = ""
- if query is not None:
- queryargs.append("q=" + query)
-
- if page is not None:
- queryargs.append("page=" + page)
+ if query is not None:
+ queryargs.append("q=" + query)
+
+ if page is not None:
+ queryargs.append("page=" + page)
- if len(queryargs):
- query_string = "&".join(queryargs)
- url += "?" + query_string
+ if len(queryargs):
+ query_string = "&".join(queryargs)
+ url += "?" + query_string
- return url
+ return url
- def get(self, request, *args, **kwargs):
+ def get(self, request, *args, **kwargs):
- self.model_type = request.GET.get('model_type', None)
- self.paginate_by = request.GET.get('perpage', 10)
- collection_name = self.kwargs.get('collection_name', None)
+ self.model_type = request.GET.get('model_type', None)
+ self.paginate_by = request.GET.get('perpage', 10)
+ collection_name = self.kwargs.get('collection_name', None)
- if self.model_type is not None:
- if collection_name is None:
- #redirect to all_model_type
- redirect_url = reverse('search_indexes:model_search', kwargs={'model_type': self.model_type})
- return redirect(self.complete_url(redirect_url))
- else:
- redirect_url = reverse('search_indexes:collection_with_model_search', kwargs={'collection_name': collection_name, 'model_type':self.model_type})
- return redirect(self.complete_url(redirect_url))
- else:
- has_error, redirectView = self.check_kwargs(**kwargs)
- if has_error:
- return redirectView(request)
- return super(IconolabSearchView, self).get(request, *args, **kwargs)
+ if self.model_type is not None:
+ if collection_name is None:
+ #redirect to all_model_type
+ redirect_url = reverse('search_indexes:model_search', kwargs={'model_type': self.model_type})
+ return redirect(self.complete_url(redirect_url))
+ else:
+ redirect_url = reverse('search_indexes:collection_with_model_search', kwargs={'collection_name': collection_name, 'model_type':self.model_type})
+ return redirect(self.complete_url(redirect_url))
+ else:
+ has_error, redirectView = self.check_kwargs(**kwargs)
+ if has_error:
+ return redirectView(request)
+ return super(IconolabSearchView, self).get(request, *args, **kwargs)
- def check_kwargs(self, **kwargs):
- result = (False, None)
- try:
- collection_name = kwargs.get('collection_name', None)
- if collection_name is None:
- return result
- collection = Collection.objects.get(name=kwargs.get('collection_name'))
- except Collection.DoesNotExist:
- result = (True, RedirectView.as_view(url=reverse('404error')))
- finally:
- return result
+ def check_kwargs(self, **kwargs):
+ result = (False, None)
+ try:
+ collection_name = kwargs.get('collection_name', None)
+ if collection_name is None:
+ return result
+ collection = Collection.objects.get(name=kwargs.get('collection_name'))
+ except Collection.DoesNotExist:
+ result = (True, RedirectView.as_view(url=reverse('404error')))
+ finally:
+ return result
- def get_queryset(self):
- qs = super(IconolabSearchView, self).get_queryset()
- return IconolabSearchView.queryset
- return qs
+ def get_queryset(self):
+ return IconolabSearchView.queryset
- def get_form_kwargs(self):
- kwargs = super(IconolabSearchView, self).get_form_kwargs()
- kwargs['collection_name'] = self.kwargs.get('collection_name', None)
- kwargs['model_type'] = self.kwargs.get('model_type', None)
- return kwargs
+ def get_form_kwargs(self):
+ kwargs = super(IconolabSearchView, self).get_form_kwargs()
+ kwargs['collection_name'] = self.kwargs.get('collection_name', None)
+ kwargs['model_type'] = self.kwargs.get('model_type', None)
+ return kwargs
- def get_template_names(self):
- try :
- model_type = self.kwargs.get('model_type', None)
- template = IconolabSearchView.templates_map[model_type]
- except KeyError:
- template = IconolabSearchView.template_name
- finally:
- return [template]
+ def get_template_names(self):
+ try :
+ model_type = self.kwargs.get('model_type', None)
+ template = IconolabSearchView.templates_map[model_type]
+ except KeyError:
+ template = IconolabSearchView.template_name
+ finally:
+ return [template]
- def get_context_data(self, *args, **kwargs):
- context = super(IconolabSearchView, self).get_context_data(*args, **kwargs)
- context['collection_name'] = self.kwargs.get('collection_name', '')
- return context
\ No newline at end of file
+ def get_context_data(self, *args, **kwargs):
+ context = super(IconolabSearchView, self).get_context_data(*args, **kwargs)
+ context['collection_name'] = self.kwargs.get('collection_name', '')
+ return context