diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-03-11 11:40:00 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-03-11 11:40:00 +0100 | 
| commit | c4f67d1b3a551ffe1cdf6f1982e551bd32c26ff7 (patch) | |
| tree | f8b79924b3e7729f834c030d63e32d24f88b505f | |
| parent | 0b47ccd2149ae923536d4d8a012af72c2b17c520 (diff) | |
| download | Ishtar-c4f67d1b3a551ffe1cdf6f1982e551bd32c26ff7.tar.bz2 Ishtar-c4f67d1b3a551ffe1cdf6f1982e551bd32c26ff7.zip | |
Fix: include generic FileField in boolean search - empty string for FileField with multiple query level
| -rw-r--r-- | ishtar_common/views_item.py | 17 | 
1 files changed, 11 insertions, 6 deletions
| diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 431135e37..ba9a41f3d 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,22 @@ 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)): +                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 | 
