summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/views_item.py86
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)