# HG changeset patch # User durandn # Date 1476271813 -7200 # Node ID 6b304e2c6af4dc6922ac78f55ee0b5d2cc43d0f1 # Parent cb79037eaa0c80131e9caa4c5f4c4c1c12071e44 reworked search design and search pagination #39 diff -r cb79037eaa0c -r 6b304e2c6af4 src/iconolab/models.py --- a/src/iconolab/models.py Tue Oct 11 12:18:52 2016 +0200 +++ b/src/iconolab/models.py Wed Oct 12 13:30:13 2016 +0200 @@ -162,8 +162,6 @@ for annotation in self.annotations.all(): revision_tags = json.loads(annotation.current_revision.get_tags_json()) tag_list += [tag_infos['tag_label'] for tag_infos in revision_tags if tag_infos.get('tag_label') is not None] #deal with - print("tag_list") - print(tag_list) return tag_list class AnnotationManager(models.Manager): diff -r cb79037eaa0c -r 6b304e2c6af4 src/iconolab/search_indexes/__init__.py --- a/src/iconolab/search_indexes/__init__.py Tue Oct 11 12:18:52 2016 +0200 +++ b/src/iconolab/search_indexes/__init__.py Wed Oct 12 13:30:13 2016 +0200 @@ -1,2 +1,2 @@ -from .indexes import AnnotationIndex, ImageIndex -__all__ = ['AnnotationIndex', 'ImageIndex', 'RevisionSignalProcessor'] \ No newline at end of file +from .indexes import AnnotationIndex, ItemIndex +__all__ = ['AnnotationIndex', 'ItemIndex', 'RevisionSignalProcessor'] \ No newline at end of file diff -r cb79037eaa0c -r 6b304e2c6af4 src/iconolab/search_indexes/forms.py --- a/src/iconolab/search_indexes/forms.py Tue Oct 11 12:18:52 2016 +0200 +++ b/src/iconolab/search_indexes/forms.py Wed Oct 12 13:30:13 2016 +0200 @@ -1,6 +1,6 @@ from django import forms from haystack.forms import SearchForm -from iconolab.models import Image, Annotation +from iconolab.models import Item, Annotation @@ -31,9 +31,9 @@ def get_model_type_queryset(self, qs, model_type): if model_type == 'images': - qs = qs.models(Image).load_all_queryset(Image, Image.objects.select_related('item', 'item__metadatas')) + 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', 'stats', 'current_revision', 'author')) + 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) diff -r cb79037eaa0c -r 6b304e2c6af4 src/iconolab/search_indexes/indexes.py --- a/src/iconolab/search_indexes/indexes.py Tue Oct 11 12:18:52 2016 +0200 +++ b/src/iconolab/search_indexes/indexes.py Wed Oct 12 13:30:13 2016 +0200 @@ -1,39 +1,37 @@ from django.utils import timezone from haystack import indexes -from iconolab.models import Annotation, Image +from iconolab.models import Annotation, Item -class ImageIndex(indexes.SearchIndex, indexes.Indexable): +class ItemIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) collection = indexes.CharField(model_attr="collection") - authors = indexes.CharField(model_attr="authors") - school = indexes.CharField(model_attr="school") - designation = indexes.CharField(model_attr="designation") - datation = indexes.CharField(model_attr="datation") - technics = indexes.CharField(model_attr="technics") - measurements = indexes.CharField(model_attr="measurements") - - create_or_usage_location = indexes.CharField(model_attr="item__metadatas__create_or_usage_location") - discovery_context = indexes.CharField(model_attr="item__metadatas__discovery_context") - conservation_location = indexes.CharField(model_attr="item__metadatas__conservation_location") + authors = indexes.CharField(model_attr="metadatas__authors") + school = indexes.CharField(model_attr="metadatas__school") + designation = indexes.CharField(model_attr="metadatas__designation") + datation = indexes.CharField(model_attr="metadatas__datation") + technics = indexes.CharField(model_attr="metadatas__technics") + measurements = indexes.CharField(model_attr="metadatas__measurements") + create_or_usage_location = indexes.CharField(model_attr="metadatas__create_or_usage_location") + discovery_context = indexes.CharField(model_attr="metadatas__discovery_context") + conservation_location = indexes.CharField(model_attr="metadatas__conservation_location") - tags = indexes.MultiValueField(model_attr="tag_labels") + #tags = indexes.MultiValueField(model_attr="tag_labels") def get_model(self): - return Image + return Item def index_queryset(self, using=None): - return self.get_model().objects.filter(created__lte=timezone.now()) + return self.get_model().objects.filter() class AnnotationIndex(indexes.SearchIndex, indexes.Indexable): ##indexed field text = indexes.CharField(document=True, use_template=True) - title = indexes.CharField(model_attr="current_revision__title") description = indexes.CharField(model_attr="current_revision__description") - collection = indexes.CharField(model_attr="collection") + collection = indexes.CharField(model_attr="image__item__collection") tags = indexes.MultiValueField(model_attr="tag_labels") ## tags diff -r cb79037eaa0c -r 6b304e2c6af4 src/iconolab/search_indexes/query.py --- a/src/iconolab/search_indexes/query.py Tue Oct 11 12:18:52 2016 +0200 +++ b/src/iconolab/search_indexes/query.py Wed Oct 12 13:30:13 2016 +0200 @@ -1,5 +1,5 @@ from haystack.query import RelatedSearchQuerySet -from iconolab.models import Annotation, Image +from iconolab.models import Annotation, Item from pprint import pprint class IconolabRelatedQuerySet(RelatedSearchQuerySet): diff -r cb79037eaa0c -r 6b304e2c6af4 src/iconolab/search_indexes/views.py --- a/src/iconolab/search_indexes/views.py Tue Oct 11 12:18:52 2016 +0200 +++ b/src/iconolab/search_indexes/views.py Wed Oct 12 13:30:13 2016 +0200 @@ -11,7 +11,6 @@ form_class = IconolabSearchForm queryset = RelatedSearchQuerySet() template_name = "search/default_search.html" - paginate_by = 10 load_all = True templates_map = { @@ -41,6 +40,7 @@ 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) if self.model_type is not None: diff -r cb79037eaa0c -r 6b304e2c6af4 src/iconolab/templates/search/annotation_search.html --- a/src/iconolab/templates/search/annotation_search.html Tue Oct 11 12:18:52 2016 +0200 +++ b/src/iconolab/templates/search/annotation_search.html Wed Oct 12 13:30:13 2016 +0200 @@ -7,7 +7,7 @@