diff options
Diffstat (limited to 'ishtar_common/views_item.py')
| -rw-r--r-- | ishtar_common/views_item.py | 29 | 
1 files changed, 16 insertions, 13 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 88cd70b43..8cd903a00 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -20,7 +20,7 @@ from django.core.cache import cache  from django.core.exceptions import ObjectDoesNotExist  from django.core.urlresolvers import reverse, NoReverseMatch  from django.db.models import Q, Count, Sum, ImageField, Func, \ -    ExpressionWrapper, FloatField +    ExpressionWrapper, FloatField, FileField  from django.db.models.fields import FieldDoesNotExist  from django.http import HttpResponse  from django.shortcuts import render @@ -654,17 +654,23 @@ def _manage_bool_fields(model, bool_fields, reversed_bool_fields, dct, or_reqs):          if k in reversed_bool_fields:              dct[k] = not dct[k]          # check also for empty value with image field -        field_name = k.split('__')[0] +        field_names = k.split('__')          # TODO: can be improved in later version of Django          try: -            c_field = model._meta.get_field(field_name) +            c_field = model._meta.get_field(field_names[0]) +            for field_name in field_names[1:-1]: +                if not hasattr(c_field, "related_model"): +                    return +                c_field = c_field.related_model._meta.get_field(field_name)              if k.endswith('__isnull') and \ -                    isinstance(c_field, ImageField): +                    (isinstance(c_field, (ImageField, FileField)) +                     or field_names[-2] == "associated_url"): +                key = "__".join(k.split('__')[:-1])                  if dct[k]:                      or_reqs.append( -                        (k, {k.split('__')[0] + '__exact': ''})) +                        (k, {key + '__exact': ''}))                  else: -                    dct[k.split('__')[0] + '__regex'] = '.{1}.*' +                    dct[key + '__regex'] = '.{1}.*'          except FieldDoesNotExist:              pass @@ -816,18 +822,13 @@ def _manage_hierarchic_fields(dct, and_reqs):                  if val.startswith('"') and val.endswith('"'):                      val = val[1:-1]                  reqs = Q(**{req: val}) -                base_req = req[:]                  for idx in range(HIERARCHIC_LEVELS):                      req = req[:-(len(suffix))] + 'parent__' + suffix                      q = Q(**{req: val})                      reqs |= q -                req = base_req[:] -                for idx in range(HIERARCHIC_LEVELS): -                    req = req[:-(len(suffix))] + 'children__' + suffix -                    q = Q(**{req: val}) -                    reqs |= q                  and_reqs.append(reqs) +                # TODO: improve query with "IN ()"?                  continue              if req.endswith('town__pk') or req.endswith('towns__pk') \ @@ -855,6 +856,7 @@ def _manage_hierarchic_fields(dct, and_reqs):                      q = Q(**{req: val})                      reqs |= q                  and_reqs.append(reqs) +                # TODO: improve query with "IN ()"?                  continue              for k_hr in HIERARCHIC_FIELDS: @@ -908,6 +910,7 @@ def _manage_hierarchic_fields(dct, and_reqs):                              req = req[:-(len(suffix))] + 'parent__' + suffix                              q = Q(**{req: val})                              reqs |= q +                    # TODO: improve query with "IN ()"?                      if reqs:                          and_reqs.append(reqs)                      break @@ -1861,7 +1864,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,              "<a class='display_details' href='#' " \              "onclick='load_window(\"{}\")'>" \              "<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i><lock></a>" -        link_ext_template = '<a href="{}" target="_blank"></a>' +        link_ext_template = '<a href="{}" target="_blank">{}</a>'          lock = ' <i class="fa fa-lock text-danger" aria-hidden="true"></i>'          own_lock = ' <i class="fa fa-lock text-success" ' \                     'aria-hidden="true"></i>'  | 
