diff options
| -rw-r--r-- | ishtar_common/templates/widgets/image_input.html | 19 | ||||
| -rw-r--r-- | 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 %}<div class="form-row form-control"> -    {% if is_initial or widget.value.url %} +    {% if widget.value.url or hidden_value %}      <span class="col-4">          <div id="lightgallery-{{widget.name}}"> -            <a href="{{ widget.value.url }}"> -                <img class="form-thumbnail" src="{{ widget.value.url }}"> +            <a href="{% if hidden_value %}{{hidden_value}}{% else %}{{ widget.value.url }}{%endif%}"> +                <img class="form-thumbnail" src="{% if widget.value.url %}{{ widget.value.url }}{% else %}{{hidden_value}}{%endif%}">              </a>          </div> -    </span>{% endif %} +    </span> +    {% elif hidden_name_value %} +    <span class="col-4"> +        {{hidden_name_value}} +    </span> +    {% endif %}      <span class="col-8"> -    {% if is_initial or widget.value.url %}{% if not widget.required %} +    {% if widget.value.url %}{% if not widget.required %}          <input type="checkbox" name="{{ widget.checkbox_name }}"                 id="{{ widget.checkbox_id }}" />          <label for="{{ widget.checkbox_id }}">{% trans "delete" %}</label>      {% endif %}{% endif %}          <input type="{{ widget.type }}" name="{{ widget.name }}"{% include 'django/forms/widgets/attrs.html' %} /> +        <input type="hidden" name="{{ widget.name }}-hidden" +               value="{% if widget.value.url %}{{widget.value.url}}{% elif hidden_value %}{{hidden_value}}{% endif %}"/> +        <input type="hidden" name="{{ widget.name }}-hidden-name" +               value="{% if hidden_name_value %}{{hidden_name_value}}{% endif %}"/>      </span>  </div>  {% 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 | 
