diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-06-05 17:34:12 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-06-05 17:34:12 +0200 |
commit | f762b35f5dc6887b73a1e6aa881227882a403eb2 (patch) | |
tree | 368b5a2921a5b5615e778e55ad265441e8e1889b /ishtar_common | |
parent | a515f83fab51fd3efb61da22d7c2e9810535ccc6 (diff) | |
download | Ishtar-f762b35f5dc6887b73a1e6aa881227882a403eb2.tar.bz2 Ishtar-f762b35f5dc6887b73a1e6aa881227882a403eb2.zip |
Search: manage many is empty request - Add is empty - no ref find for container search
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/views_item.py | 86 |
1 files changed, 62 insertions, 24 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index d54c7d15b..1dcb01b34 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -624,31 +624,54 @@ def _search_manage_search_vector(model, dct, exc_dct, distinct_queries, def _manage_bool_fields(model, bool_fields, reversed_bool_fields, dct, or_reqs): bool_fields = list(bool_fields) + list(reversed_bool_fields) for k in bool_fields: - if k in dct: - if dct[k] == u"1": - dct.pop(k) - else: - dct[k] = dct[k].replace(u'"', u'') - if dct[k] in [u"2", u"yes", unicode(_(u"Yes")).lower()]: - dct[k] = True + if k not in dct: + continue + elif dct[k] == u"1": + dct.pop(k) + continue + dct[k] = dct[k].replace(u'"', u'') + if dct[k] in [u"2", u"yes", unicode(_(u"Yes")).lower()]: + dct[k] = True + else: + dct[k] = False + if k in reversed_bool_fields: + dct[k] = not dct[k] + # check also for empty value with image field + field_name = k.split('__')[0] + # TODO: can be improved in later version of Django + try: + c_field = model._meta.get_field(field_name) + if k.endswith('__isnull') and \ + isinstance(c_field, ImageField): + if dct[k]: + or_reqs.append( + (k, {k.split('__')[0] + '__exact': ''})) else: - dct[k] = False - if k in reversed_bool_fields: - dct[k] = not dct[k] - # check also for empty value with image field - field_name = k.split('__')[0] - # TODO: can be improved in later version of Django - try: - c_field = model._meta.get_field(field_name) - if k.endswith('__isnull') and \ - isinstance(c_field, ImageField): - if dct[k]: - or_reqs.append( - (k, {k.split('__')[0] + '__exact': ''})) - else: - dct[k.split('__')[0] + '__regex'] = '.{1}.*' - except FieldDoesNotExist: - pass + dct[k.split('__')[0] + '__regex'] = '.{1}.*' + except FieldDoesNotExist: + pass + + +def _manage_many_counted_fields(fields, reversed_fields, dct, excluded_dct): + bool_fields = list(fields or []) + list(reversed_fields or []) + for k in bool_fields: + if k not in dct: + continue + elif dct[k] == u"1": + dct.pop(k) + continue + dct[k] = dct[k].replace(u'"', u'') + if dct[k] in [u"2", u"yes", unicode(_(u"Yes")).lower()]: + dct[k] = True + else: + dct[k] = None + if k in reversed_fields: + dct[k] = True if not dct[k] else None + if dct[k]: + dct.pop(k) + excluded_dct[k] = None + else: + dct[k] = None today_lbl = pgettext_lazy("key for text search", u"today"), @@ -1289,6 +1312,11 @@ def get_item(model, func_name, default_name, extra_request_keys=None, else: my_reversed_bool_fields = reversed_bool_fields[:] \ if reversed_bool_fields else [] + + many_counted_fields = getattr(model, "MANY_COUNTED_FIELDS", None) + reversed_many_counted_fields = getattr( + model, "REVERSED_MANY_COUNTED_FIELDS", None) + if not dated_fields and hasattr(model, 'DATED_FIELDS'): my_dated_fields = model.DATED_FIELDS[:] else: @@ -1476,6 +1504,16 @@ def get_item(model, func_name, default_name, extra_request_keys=None, _manage_bool_fields(model, my_bool_fields, my_reversed_bool_fields, excluded_dct, exc_or_reqs) + tmp_excluded = {} + _manage_many_counted_fields( + many_counted_fields, reversed_many_counted_fields, + dct, tmp_excluded) + _manage_many_counted_fields( + many_counted_fields, reversed_many_counted_fields, + excluded_dct, dct) + if tmp_excluded: + excluded_dct.update(tmp_excluded) + _manage_dated_fields(my_dated_fields, dct) _manage_dated_fields(my_dated_fields, excluded_dct) |