summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/templates/widgets/image_input.html19
-rw-r--r--ishtar_common/widgets.py38
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