summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2013-09-04 20:05:24 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2013-09-04 20:05:24 +0200
commit1f16014274a2ad16fcd635fc9b506ef429a33677 (patch)
treed7e4c7b4121f09210b398aa4d6bc3830e6e1858e /ishtar_common/views.py
parent4aa9cda8b8bd1c9f51e467541a97d30669130243 (diff)
downloadIshtar-1f16014274a2ad16fcd635fc9b506ef429a33677.tar.bz2
Ishtar-1f16014274a2ad16fcd635fc9b506ef429a33677.zip
Improve Image field management (refs #1365)
* add a custom widget to allow display via prettyPhoto on forms * disable resizing when the image is deleted * fix "has image" search request to manage empty and null field for images * fix deletion of files by the wizard * fix initialization of instancied form for files and images
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py26
1 files changed, 19 insertions, 7 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 3ebb20569..cf93ba2a4 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -36,7 +36,7 @@ from django.contrib.auth import logout
from django.core import serializers
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse, NoReverseMatch
-from django.db.models import Q
+from django.db.models import Q, ImageField
from django.http import HttpResponse, Http404
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext, loader
@@ -191,6 +191,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
request_keys.update(extra_request_keys)
request_items = request.method == 'POST' and request.POST or request.GET
dct = base_request.copy()
+ and_reqs, or_reqs = [], []
try:
old = 'old' in request_items and int(request_items['old'])
except ValueError:
@@ -216,6 +217,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
dct[k] = dct[k] == u"2" and True or False
if k in reversed_bool_fields:
dct[k] = not dct[k]
+ # check also for empty value with image field
+ c_field = model._meta.get_field(k.split('__')[0])
+ 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}.*'
for k in dated_fields:
if k in dct:
if not dct[k]:
@@ -229,7 +238,6 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
except AssertionError:
dct.pop(k)
# manage hierarchic conditions
- or_reqs = []
for req in dct.copy():
for k_hr in HIERARCHIC_FIELDS:
if type(req) in (list, tuple):
@@ -240,7 +248,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
q = Q(**{r:val})
else:
q = q | Q(**{r:val})
- or_reqs.append(q)
+ and_reqs.append(q)
break
elif req.endswith(k_hr + '__pk'):
val = dct.pop(req)
@@ -250,11 +258,16 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
req = req[:-2] + 'parent__pk'
q = Q(**{req:val})
reqs = reqs | q
- or_reqs.append(reqs)
+ and_reqs.append(reqs)
break
query = Q(**dct)
- for or_req in or_reqs:
- query = query & or_req
+ for k, or_req in or_reqs:
+ alt_dct = dct.copy()
+ alt_dct.pop(k)
+ alt_dct.update(or_req)
+ query = query | Q(**alt_dct)
+ for and_req in and_reqs:
+ query = query & and_req
items = model.objects.filter(query).distinct()
q = request_items.get('sidx')
@@ -571,7 +584,6 @@ def action(request, action_slug, obj_id=None, *args, **kwargs):
associated_wizard = action_slug + '_wizard'
dct = {}
globals_dct = globals()
- print action_slug
if action_slug in globals_dct:
return globals_dct[action_slug](request, dct, obj_id, *args, **kwargs)
elif hasattr(ishtar_forms, action_slug + "_wizard"):