diff options
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 |
commit | 057f6d81d5dee5ba8eba2fd959553cf57657990d (patch) | |
tree | d7e4c7b4121f09210b398aa4d6bc3830e6e1858e /ishtar_common/views.py | |
parent | 843dbe43a597438c62471e2bdc3758db8e2708c0 (diff) | |
download | Ishtar-057f6d81d5dee5ba8eba2fd959553cf57657990d.tar.bz2 Ishtar-057f6d81d5dee5ba8eba2fd959553cf57657990d.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.py | 26 |
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"): |