From 4cdf2c41ae2096fc16a6f8ffb801635f93804f36 Mon Sep 17 00:00:00 2001 From: olivier <> Date: Mon, 15 Feb 2010 16:56:17 +0000 Subject: [PATCH] fix quick search ; advanced search : fix searching by collector, creator and publish date (year range) --- telemeta/htdocs/css/telemeta.css | 2 +- telemeta/locale/fr/LC_MESSAGES/django.mo | Bin 8172 -> 8437 bytes telemeta/locale/fr/LC_MESSAGES/django.po | 73 ++++++++++++------ telemeta/models/__init__.py | 2 - telemeta/models/core.py | 24 +++--- telemeta/models/query.py | 50 +++++++++--- .../telemeta_default/inc/collection_list.html | 4 + .../telemeta_default/inc/mediaitem_list.html | 4 + .../telemeta_default/search_criteria.html | 49 +++++++++--- .../telemeta_default/search_results.html | 17 ++-- telemeta/web/base.py | 28 ++++--- 11 files changed, 180 insertions(+), 73 deletions(-) diff --git a/telemeta/htdocs/css/telemeta.css b/telemeta/htdocs/css/telemeta.css index 5770da99..a5c3b638 100644 --- a/telemeta/htdocs/css/telemeta.css +++ b/telemeta/htdocs/css/telemeta.css @@ -254,7 +254,7 @@ label.disabled { color: #d7d7d7 } #searchform fieldset { padding: 0; padding: .5em; - width: 450px; + width: 650px; border: none; border: 1px dotted #888; margin-bottom: 1em; diff --git a/telemeta/locale/fr/LC_MESSAGES/django.mo b/telemeta/locale/fr/LC_MESSAGES/django.mo index 5ed08461c97097020302dcc31c78c6fb99ed7f76..e42705f9e641a4d50f59a91863e24d1b863284c1 100644 GIT binary patch delta 3450 zcmZ9NeN5F=7{?DFqTm%lg%FghXbJ+pC-_FbgrZ`KmamCdxCv?q+>39h7b{=$4KG^O zV&+QcTux)PWiE02p)Pwdr!`C0Dl0cL*R*sq>+`+$+>Ld1zrW9O&hPho&htFyoZr2j zcYmz!MtqxnhPEH2po?vcxeV8}=R!N*!I%tq0rr6RU`N>5VN4|K1!G}9sPP;-J`sk~ zFSO&+A+Aj^jDe+av@t$Yi4n)Zao7bm!*=ir%!D`Wcnsb#jT7p*Y}gx)hYF+&4u=(x zpE=A$6MhKg?-Y!HEif9MgAV35Ut`GO4^V;J58N;&inOBWcZKn=J0y8C5GsSwke?~w z(jCr)$#50a1b(RJ8zC;uG0Rg>#k~OAGQYWOZ(Osy1vTLV+mGoK%&;3wXWVJ~lc6dy z9V+mJke{jKqKa&^<6B??{R2>eoUl9teQg=|0;3ze0_E^7d;&g(Dq$ktl~D>*MfyUO zbO6-zIgp>p=c3H!K>1w^^?bQy71Z-@rJ!|0xI)Qp-OiNDw7*fYxgr$ zK)*o+^gGmZ4{Se@m$m6SLEZ0c*#qjmbf~4vhN{Gfc?1;FnPT??auk$54KgeY~v~dqNEifqF0(Cc$w~ zn`!}6=~hDpxEb;@du;z*h);7IYBQgOs_a#$_wHCef|@Uyhq^*v3WhevU^`G?`^8Wb zt%TYebce{d^d&^FI}X zU`?^T;f304YoQ!&fC_LY)SB;wV_>7be;sP6ZbPkkTaHc^bU>Y=kz5quEZZ-I>Gapb zNS*&97&-8Ls8ao+8}I?t#E)%1f?1S7d&rPUgxVVep_XJS)ccE|c7HY0(yoUpc>`1e z??EMY68d^$G-K!sb`xrX2o_w9;viKtX^`YhE>tEnp!SB#a+$qf169eLPyro+O5`Kx zgr{x)I@D(Ushd6je=(p4JCcrGNQDZd50t|pP%lh^3TQr5sjHxl(`u-_u@5SdMySf2 zhN{F_sLU@y9qVr`ZzfZJP5dVV$|wSFn#cj=&ooChl=!9JAMzUA`hX~E{Zf2U;@3ZM|m?<}Z5=R(c56e>~QN(_~F8&sr?P%j>WY49l2#GgZoWWIx1qQ9Z`$UjgH zV>x4*AQ`F>nUGs%BGmhCs0w(X=BtGy;4^zLQRhF#8C?4`s6euyc6%PwgR`M3QUVpw zQmB&FLRF&9ax>J2YX{W*-B9m0K>0lg<>vz^{~yCn%x^AXXf1w(VNg+qT0abBp~@^m zYQxd6fW;paEJV+sy>@H~dgyD0+EmI$Z4=so zl+8Xg4b4Mp15hTKi7HVBT7XueXjFmJR-)$u79S|Bzn9JncHm`8ZM6B;uCi2VcUgNJ z)S4C{l~h$MN1?U_qnGW}L6v(0+KFZ$HNJIbo!(r7QLho2cCOl!K?HViD)x9Z8)^Mt zMEy}7N<#%m8?*ssBQ>r2+JF_jjBRB*v9}_9Zvv4ogU_Q;s2B}Gp*GqYZcCkjEHn%0 z7^y{|jp%9Ax-F(N)DCEW{lBeez_*#pa#VwIkeZIq5adTXijhc1ZZ3KXsZ9@inbwt&x9%d+78pgOWpqFg#P|p4rf!GBP%?`?W!&*b5^>%UUzkcnHlU>yFE3_ zy&nIlSXX4Z$5Z2OYKVQ*CTxX&SC_+4!<>VLj~JTUG_vc~uyC)tsX5_Vcv6wOq|A*c sw<&5ls+V0}kF(V6toGL@Es1tBL3NF{d__gmA4#uAhPNE_Z%SSAALlMLl>h($ delta 3214 zcmYM!eN0zX9LMnkiAaKi@}Lkw@=TBdqGixOD(>nWo@9Uhyz31V3&*f^#r5VmQ zqlWAl7i!#nQRH6>=&?5(K^A9@qXs&SqwzfQGe2?BM1P?&@DHZpP`0HBa!_AU zA!^)8)N_k%yAgF?Gmgbg4iz097nQm`)C%80O+0AZUm`#ABNu%wf1*+w!A*KD&02t( zumoeU3UxMC*tXBMpGVE(9HyefaU7HJ9P%?)xafvZX461XsFi1+CY)gVr=uoZgxYZf zDub&~8QOx%*jD@ZHrw_GbWArD4ZO$R@Dggm9^?R=!y52+lr zpjD^^w4gHOLvA&$?e9UIu_LJQUdQ43{s*W`r{hEWhj8+$cawnHK_TX1G3v8vL@lh< zwq4Ak-HTel1uVj^P??G0A@ygVGLdWB`52+^zlaJyGlz@LLM`eQY(@>>M|}+kkTsfK zREkfb4(WN+j=sZG{1x?&DVkjk(> zh1%hJsPFZh^;^`$mrx7;8#PfV>C<@esBuzI8_YzFQ-mbPl%k%mNg)3`Ynp6F8)}7n zQHSLK>L17<>tWP@$4~>li<;;xYQYy!3;o{qUq)r*3hEUFv286d5_SJrhl>7?ib{C_ zY5`@afh$letwK#$huUc~D#fj+h3-Z@_adg?%czM5k-5#Ms8{qm>MZ<$8qWzM@0uV6 zm5FrJt0>{30cuehSdE%+J!%K-sDWJ6!VjSi=bNbU&Y+hGRLU=-KG#q#$(SC{F=bT7 z(Xkwr+73*^eRvBFpbpOus1;vF9lnsHz`IXGEhGcgKLvH)LR3a-Pz$Oh}A?oF_Tcq zbhte0RRg=3M!lNYOspW9h-QK>%_}pwDoghgj}gkybYeWA-KkU(_Yitr8wkCgwZsI1 z+Li|^%Y-NYF9!rQi+ZKz6<-{XI5utZnPN=LTwt6*Vp1|9QWZTwZ zRe6+H!~9-DmraBYTmi9>(4kY=9>BY%axEp660Kg3F;C(wLa#2@_C1966UD>>#9c%l zF_qBQu#UKsSg-jPQc-CP;2pjSTTj9q;yGe2v4wbwP|=~)xmZHXCUi*K2%VYvgo?hD zWvWnu19)H8!_>2g*#Gw*`1~^HoJ52ZD%*(1i8*T6qGt+;TZ!9%m^(0%aDR!N?~abB zaJ%C&`*%i^2fNot*7i3\n" "Language-Team: LANGUAGE \n" @@ -32,13 +32,13 @@ msgstr "valeur" msgid "publisher" msgstr "éditeur" -#: models/enum.py:134 models/enum.py:145 models/instrument.py:41 +#: models/enum.py:134 models/enum.py:146 models/instrument.py:41 #: models/instrument.py:51 models/location.py:50 models/location.py:142 #: models/media.py:347 msgid "name" msgstr "nom" -#: models/enum.py:144 models/media.py:225 +#: models/enum.py:138 models/enum.py:145 models/media.py:225 msgid "population / social group" msgstr "population / groupe social" @@ -78,7 +78,7 @@ msgstr "type complet" msgid "current location" msgstr "lieu actuel" -#: models/location.py:57 models/location.py:151 +#: models/location.py:57 models/location.py:151 models/location.py:165 msgid "authoritative" msgstr "officiel" @@ -428,6 +428,7 @@ msgid "Search" msgstr "Recherche" #: templates/telemeta_default/base.html:34 +#: templates/telemeta_default/search_criteria.html:53 msgid "Advanced search" msgstr "Recherche avancée" @@ -473,8 +474,8 @@ msgid "Legal mentions" msgstr "Mentions légales" #: templates/telemeta_default/collection_detail.html:77 -#: templates/telemeta_default/inc/collection_list.html:16 -#: templates/telemeta_default/inc/mediaitem_list.html:15 +#: templates/telemeta_default/inc/collection_list.html:17 +#: templates/telemeta_default/inc/mediaitem_list.html:16 msgid "Recordist" msgstr "Enregistré par" @@ -528,7 +529,7 @@ msgid "List" msgstr "Liste" #: templates/telemeta_default/geo_continents.html:24 -#: templates/telemeta_default/index.html:8 +#: templates/telemeta_default/index.html:9 msgid "Geographic Navigator" msgstr "Navigateur géographique" @@ -538,11 +539,11 @@ msgstr "Navigateur géographique" msgid "World" msgstr "Monde" -#: templates/telemeta_default/index.html:10 +#: templates/telemeta_default/index.html:11 msgid "Open the geographic navigator" msgstr "Accéder au navigateur géographique" -#: templates/telemeta_default/index.html:13 +#: templates/telemeta_default/index.html:14 msgid "Musical selection" msgstr "Sélection musicale" @@ -551,7 +552,7 @@ msgid "Recording date" msgstr "Date d'enregistrement" #: templates/telemeta_default/mediaitem_detail.html:147 -#: templates/telemeta_default/inc/mediaitem_list.html:17 +#: templates/telemeta_default/inc/mediaitem_list.html:18 msgid "Location" msgstr "Lieu" @@ -567,22 +568,50 @@ msgstr "Informations générales" msgid "No such item" msgstr "Item introuvable" -#: templates/telemeta_default/inc/collection_list.html:6 -#, python-format -msgid "Collections %(first_on_page)s to %(last_on_page)s on %(hits)s" -msgstr "Collections %(first_on_page)s à %(last_on_page)s sur %(hits)s" - +#: templates/telemeta_default/search_criteria.html:87 #: templates/telemeta_default/inc/collection_list.html:14 #: templates/telemeta_default/inc/mediaitem_list.html:14 msgid "Title" msgstr "Titre" -#: templates/telemeta_default/inc/collection_list.html:17 -#: templates/telemeta_default/inc/mediaitem_list.html:21 +#: templates/telemeta_default/search_criteria.html:93 +#: templates/telemeta_default/search_results.html:29 +#: templates/telemeta_default/inc/collection_list.html:18 +#: templates/telemeta_default/inc/mediaitem_list.html:22 msgid "Year of recording" msgstr "Année d'enregistrement" -#: templates/telemeta_default/inc/collection_list.html:38 +#: templates/telemeta_default/search_criteria.html:100 +#: templates/telemeta_default/search_criteria.html:119 +#: templates/telemeta_default/search_results.html:31 +#: templates/telemeta_default/search_results.html:38 +msgid "to" +msgstr "à" + +#: templates/telemeta_default/search_criteria.html:112 +#: templates/telemeta_default/search_results.html:36 +msgid "Year of issue" +msgstr "Année de parution" + +#: templates/telemeta_default/search_results.html:6 +msgid "Search results" +msgstr "Résultats de recherche" + +#: templates/telemeta_default/search_results.html:11 +msgid "Search pattern" +msgstr "Recherche" + +#: templates/telemeta_default/inc/collection_list.html:6 +#, python-format +msgid "Collections %(first_on_page)s to %(last_on_page)s on %(hits)s" +msgstr "Collections %(first_on_page)s à %(last_on_page)s sur %(hits)s" + +#: templates/telemeta_default/inc/collection_list.html:15 +#: templates/telemeta_default/inc/mediaitem_list.html:15 +msgid "Code" +msgstr "Cote" + +#: templates/telemeta_default/inc/collection_list.html:42 msgid "No collection" msgstr "Aucune collection" @@ -595,22 +624,22 @@ msgstr "Métadonnées Dublin Core" msgid "Items %(first_on_page)s to %(last_on_page)s on %(hits)s" msgstr "Items %(first_on_page)s à %(last_on_page)s sur %(hits)s" -#: templates/telemeta_default/inc/mediaitem_list.html:19 +#: templates/telemeta_default/inc/mediaitem_list.html:20 msgid "Country/Continent" msgstr "Pays/Continent" -#: templates/telemeta_default/inc/mediaitem_list.html:46 +#: templates/telemeta_default/inc/mediaitem_list.html:50 msgid "No item" msgstr "Aucun item" -#: templatetags/telemeta_utils.py:200 +#: templatetags/telemeta_utils.py:203 #, python-format msgid "%(count)d item" msgid_plural "%(count)d items" msgstr[0] "%(count)d item" msgstr[1] "%(count)d items" -#: templatetags/telemeta_utils.py:203 +#: templatetags/telemeta_utils.py:206 #, python-format msgid "%(count)d collection" msgid_plural "%(count)d collections" diff --git a/telemeta/models/__init__.py b/telemeta/models/__init__.py index 678ec369..5dd06929 100644 --- a/telemeta/models/__init__.py +++ b/telemeta/models/__init__.py @@ -37,6 +37,4 @@ from telemeta.models.location import * from telemeta.models.instrument import * from telemeta.models.enum import * from telemeta.models.system import * -#MediaCollection, MediaItem, MediaPart, Revision, \ -# PhysicalFormat, PublishingStatus diff --git a/telemeta/models/core.py b/telemeta/models/core.py index 0fc8d62e..7db1716c 100644 --- a/telemeta/models/core.py +++ b/telemeta/models/core.py @@ -36,7 +36,7 @@ __all__ = ['ModelCore', 'MetaCore', 'DurationField', 'Duration', 'WeakForeignKey', 'EnhancedModel', 'CharField', 'TextField', 'IntegerField', 'BooleanField', 'DateTimeField', 'FileField', 'ForeignKey', 'FloatField', 'DateField', - 'RequiredFieldError', 'CoreQuerySet', 'CoreManager'] + 'RequiredFieldError', 'CoreQuerySet', 'CoreManager', 'word_search_q'] from django.core import exceptions from django import forms @@ -410,6 +410,16 @@ class ModelCore(EnhancedModel): class MetaCore: app_label = 'telemeta' +def word_search_q(field, pattern): + words = re.split("[ .*-]+", pattern) + q = Q() + for w in words: + if len(w) >= 3: + kwargs = {field + '__icontains': w} + q &= Q(**kwargs) + + return q + class CoreQuerySet(EnhancedQuerySet): "Base class for all query sets" @@ -417,18 +427,8 @@ class CoreQuerySet(EnhancedQuerySet): "Return an empty result set" return self.extra(where = ["0 = 1"]) - def word_search_q(self, field, pattern): - words = re.split("[ .*-]+", pattern) - q = Q() - for w in words: - if len(w) >= 3: - kwargs = {field + '__icontains': w} - q &= Q(**kwargs) - - return q - def word_search(self, field, pattern): - return self.filter(self.word_search_q(field, pattern)) + return self.filter(word_search_q(field, pattern)) def _by_change_time(self, type, from_time = None, until_time = None): "Search between two revision dates" diff --git a/telemeta/models/query.py b/telemeta/models/query.py index 1f96d36c..c46f31d4 100644 --- a/telemeta/models/query.py +++ b/telemeta/models/query.py @@ -43,11 +43,13 @@ class MediaItemQuerySet(CoreQuerySet): "Base class for all media item query sets" def quick_search(self, pattern): - "Perform a quick search on id and title" + "Perform a quick search on code, title and collector name" + pattern = pattern.strip() return self.filter( - self.word_search_q('id', pattern) | - self.word_search_q('title', pattern) | - self.word_search_q('author', pattern) + Q(code__contains=pattern.strip()) | + Q(old_code__contains=pattern.strip()) | + word_search_q('title', pattern) | + self.by_fuzzy_collector_q(pattern) ) def without_collection(self): @@ -66,7 +68,8 @@ class MediaItemQuerySet(CoreQuerySet): def by_title(self, pattern): "Find items by title" # to (sort of) sync with models.media.MediaItem.get_title() - return self.filter(self.word_search_q("title", pattern) | self.word_search_q("collection__title", pattern)) + return self.filter(word_search_q("title", pattern) | + (Q(title="") & word_search_q("collection__title", pattern))) def by_publish_year(self, from_year, to_year = None): "Find items by publishing year" @@ -158,6 +161,15 @@ class MediaItemQuerySet(CoreQuerySet): ids = self.filter(ethnic_group__isnull=False).values('ethnic_group'); return EthnicGroup.objects.filter(pk__in=ids).order_by('name') + @staticmethod + def by_fuzzy_collector_q(pattern): + return (word_search_q('collection__creator', pattern) | + word_search_q('collection__collector', pattern) | + word_search_q('collector', pattern)) + + def by_fuzzy_collector(self, pattern): + return self.filter(self.by_fuzzy_collector_q(pattern)) + class MediaItemManager(CoreManager): "Manage media items queries" @@ -200,11 +212,13 @@ class MediaItemManager(CoreManager): class MediaCollectionQuerySet(CoreQuerySet): def quick_search(self, pattern): - "Perform a quick search on id, title and creator name" + "Perform a quick search on code, title and collector name" + pattern = pattern.strip() return self.filter( - self.word_search_q('id', pattern) | - self.word_search_q('title', pattern) | - self.word_search_q('creator', pattern) + Q(code__contains=pattern.strip()) | + Q(old_code__contains=pattern.strip()) | + word_search_q('title', pattern) | + self.by_fuzzy_collector_q(pattern) ) def by_location(self, location): @@ -253,8 +267,26 @@ class MediaCollectionQuerySet(CoreQuerySet): to_min = self.filter(recorded_to_year__gt=0).aggregate(Min('recorded_to_year'))['recorded_to_year__min'] year_min = min(from_min, to_min) + if not year_max: + year_max = year_min + elif not year_min: + year_min = year_max + + return year_min, year_max + + def publishing_year_range(self): + year_max = self.aggregate(Max('year_published'))['year_published__max'] + year_min = self.filter(year_published__gt=0).aggregate(Min('year_published'))['year_published__min'] + return year_min, year_max + @staticmethod + def by_fuzzy_collector_q(pattern): + return word_search_q('creator', pattern) | word_search_q('collector', pattern) + + def by_fuzzy_collector(self, pattern): + return self.filter(self.by_fuzzy_collector_q(pattern)) + class MediaCollectionManager(CoreManager): "Manage collection queries" diff --git a/telemeta/templates/telemeta_default/inc/collection_list.html b/telemeta/templates/telemeta_default/inc/collection_list.html index a245cd9b..8ff255a6 100644 --- a/telemeta/templates/telemeta_default/inc/collection_list.html +++ b/telemeta/templates/telemeta_default/inc/collection_list.html @@ -12,6 +12,7 @@ + @@ -21,6 +22,9 @@ +
{% trans "Title" %}{% trans "Code" %} {% field_label "MediaCollection" "creator" %} {% trans "Recordist" %} {% trans "Year of recording" %} {{ collection }} + {{ collection.code|default:collection.old_code }} + {{ collection.creator }} {{ collection.apparent_collector }} diff --git a/telemeta/templates/telemeta_default/inc/mediaitem_list.html b/telemeta/templates/telemeta_default/inc/mediaitem_list.html index 67a1570b..4bae20a8 100644 --- a/telemeta/templates/telemeta_default/inc/mediaitem_list.html +++ b/telemeta/templates/telemeta_default/inc/mediaitem_list.html @@ -12,6 +12,7 @@ + {% if location_name %} @@ -25,6 +26,9 @@ + {% if location_name %} diff --git a/telemeta/templates/telemeta_default/search_criteria.html b/telemeta/templates/telemeta_default/search_criteria.html index d0e28336..a9b3f00b 100644 --- a/telemeta/templates/telemeta_default/search_criteria.html +++ b/telemeta/templates/telemeta_default/search_criteria.html @@ -10,9 +10,9 @@ {% block extra_javascript %} {% endblock %} {% block content %} -

Advanced search

+

{% trans "Advanced search" %}

@@ -68,18 +74,23 @@ $(document).ready(function () {

- + + +

+ +

+

- - + +

{% if rec_years %}

- + + + + {% trans "to" %} +

+ {% endif %}
diff --git a/telemeta/templates/telemeta_default/search_results.html b/telemeta/templates/telemeta_default/search_results.html index 2d58402b..2cca3157 100644 --- a/telemeta/templates/telemeta_default/search_results.html +++ b/telemeta/templates/telemeta_default/search_results.html @@ -3,7 +3,7 @@ {% load i18n %} {% block content %} -

Search results

+

{% trans "Search results" %}

{% if criteria %}
    @@ -11,13 +11,16 @@
  • {% trans "Search pattern" %}: {{criteria.pattern}}
  • {% endif %} {% if criteria.location %} -
  • {% field_label "Location" %}: {{criteria.location}}
  • +
  • {% field_label "Location" %}: {{criteria.location}}
  • {% endif %} {% if criteria.ethnic_group %}
  • {% field_label "EthnicGroup" %}: {{criteria.ethnic_group}}
  • {% endif %} {% if criteria.creator %} -
  • Creator: {{criteria.creator}}
  • +
  • {% field_label "MediaCollection" "creator" %}: {{criteria.creator}}
  • + {% endif %} + {% if criteria.collector %} +
  • {% field_label "MediaCollection" "collector" %}: {{criteria.collector}}
  • {% endif %} {% if criteria.title %}
  • Title: {{criteria.title}}
  • @@ -29,8 +32,12 @@ {% endifnotequal %} {% endif %} - {% if criteria.pub_date %} -
  • Publishing date: {{criteria.pub_date}}
  • + {% if criteria.pub_year_from %} +
  • {% trans "Year of issue" %}: {{criteria.pub_year_from}} + {% ifnotequal criteria.pub_year_to criteria.pub_year_from %} + {% trans "to" %} {{criteria.pub_year_to}} + {% endifnotequal %} +
  • {% endif %}
{% endif %} diff --git a/telemeta/web/base.py b/telemeta/web/base.py index 7a64f6a8..c8b05f3f 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -169,10 +169,12 @@ class WebView(Component): def edit_search(self, request, criteria=None): year_min, year_max = MediaCollection.objects.all().recording_year_range() - years = year_min and year_max and range(year_min, year_max + 1) \ - or year_min and [year_min] or year_max and [year_max] + rec_years = year_min and year_max and range(year_min, year_max + 1) or [] + year_min, year_max = MediaCollection.objects.all().publishing_year_range() + pub_years = year_min and year_max and range(year_min, year_max + 1) or [] return render_to_response('telemeta/search_criteria.html', { - 'rec_years': years, + 'rec_years': rec_years, + 'pub_years': pub_years, 'ethnic_groups': MediaItem.objects.all().ethnic_groups(), 'criteria': criteria }) @@ -218,20 +220,24 @@ class WebView(Component): EthnicGroup.objects.get(pk=value)), 'creator': lambda value: ( collections.word_search('creator', value), - items.word_search('auteur', value)), + items.word_search('collection__creator', value)), + 'collector': lambda value: ( + collections.by_fuzzy_collector(value), + items.by_fuzzy_collector(value)), 'rec_year_from': lambda value: ( - collections.by_recording_year(int(value), int(input['rec_year_to'])), + collections.by_recording_year(int(value), int(input.get('rec_year_to', value))), items.by_recording_date(datetime.date(int(value), 1, 1), - datetime.date(int(input['rec_year_to']), 12, 31))), + datetime.date(int(input.get('rec_year_to', value)), 12, 31))), 'rec_year_to': lambda value: (collections, items), - 'pub_date': lambda value: ( - collections.by_publish_date(value), - items.by_publish_date(value)) + 'pub_year_from': lambda value: ( + collections.by_publish_year(int(value), int(input.get('pub_year_to', value))), + items.by_publish_year(int(value), int(input.get('pub_year_to', value)))), + 'pub_year_to': lambda value: (collections, items), } for key, value in input.items(): func = switch.get(key) - if func and value: + if func and value and value != "0": res = func(value) if len(res) > 2: collections, items, value = res @@ -239,6 +245,8 @@ class WebView(Component): collections, items = res criteria[key] = value + print collections.query + if type is None: if collections.count() and not items.count(): type = 'collections' -- 2.39.5
{% trans "Title" %}{% trans "Code" %} {% trans "Recordist" %}{% trans "Location" %} {{ item }} + {{ item.code|default:item.old_code }} + {{ item.apparent_collector }}{{ item.location.name }}