From 7d0bc905cc774f0b7fb5547340e216fb564923e7 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 26 Apr 2018 13:24:46 +0200 Subject: Image widget: manage posted and initiel image displaying --- ishtar_common/templates/widgets/image_input.html | 19 ++++++++---- ishtar_common/widgets.py | 38 +++++++++++++++++++++++- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/ishtar_common/templates/widgets/image_input.html b/ishtar_common/templates/widgets/image_input.html index c71ada193..7f8f62482 100644 --- a/ishtar_common/templates/widgets/image_input.html +++ b/ishtar_common/templates/widgets/image_input.html @@ -1,19 +1,28 @@ {% load i18n %}
- {% if is_initial or widget.value.url %} + {% if widget.value.url or hidden_value %} - {% endif %} + + {% elif hidden_name_value %} + + {{hidden_name_value}} + + {% endif %} - {% if is_initial or widget.value.url %}{% if not widget.required %} + {% if widget.value.url %}{% if not widget.required %} {% endif %}{% endif %} + +
{% if is_initial or widget.value.url %} diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index 192de6f65..22e4901cf 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -23,9 +23,9 @@ import logging from django import forms from django.conf import settings +from django.core.files import File from django.core.urlresolvers import reverse, NoReverseMatch from django.db.models import fields -from django.db.models.fields.files import ImageFieldFile from django.forms import ClearableFileInput from django.forms.utils import flatatt from django.forms.widgets import CheckboxSelectMultiple as \ @@ -304,6 +304,42 @@ class ImageFileInput(ClearableFileInput): if full_path.startswith(settings.MEDIA_ROOT): value.url = settings.MEDIA_URL + full_path[ len(settings.MEDIA_ROOT):] + elif value: + full_path = settings.MEDIA_ROOT + unicode(value) + try: + with open(full_path) as f: + f = File(f) + f.url = settings.MEDIA_URL + unicode(value) + value = f + except IOError: + return value + + return value + + def get_context(self, name, value, attrs): + context = super(ImageFileInput, self).get_context(name, value, attrs) + if getattr(self, 'hidden', None): + context['hidden_value'] = self.hidden + # on post memory file is used: display the name + if getattr(self, 'hidden_name', None): + context['hidden_name_value'] = self.hidden_name + return context + + def value_from_datadict(self, data, files, name): + value = super(ImageFileInput, self).value_from_datadict( + data, files, name) + hidden_name = name + "-hidden" + hidden_name_value = name + "-hidden-name" + self.hidden, self.hidden_name = None, None + if name in files: + # new file posted + self.hidden_name = files.get(name).name + elif data.get(hidden_name_value, None): + # file posted previously - keep the name + self.hidden_name = data.get(hidden_name_value) + elif hidden_name in data: + # initial file + self.hidden = data.get(hidden_name) return value -- cgit v1.2.3