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 | 92a69a405d909e77b724138ce6d927c2d3d0fdf1 (patch) | |
tree | f8b79924b3e7729f834c030d63e32d24f88b505f | |
parent | 2bc60033c79780e11a05011b5c803da83f03a8fe (diff) | |
download | Ishtar-92a69a405d909e77b724138ce6d927c2d3d0fdf1.tar.bz2 Ishtar-92a69a405d909e77b724138ce6d927c2d3d0fdf1.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 |