summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py29
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 = '&nbsp;<i class="fa fa-lock text-danger" aria-hidden="true"></i>'
own_lock = '&nbsp;<i class="fa fa-lock text-success" ' \
'aria-hidden="true"></i>'