I have, in my admin interface, a form with a ImageField. Everything works great except when some other field raises a validation error. In those cases, the form returns to the user for correction, but the already loaded image file is cleared from the form.
Any idea in how to, somehow, reload the already submitted image to the form in order to allow the image beeing saved?
Thanks!
SOme interesting bits of code:
class DealForm(forms.ModelForm):
image = forms.ImageField(required=False,widget=AdminImageWidget)
def clean():
data = self.cleaned_data
date_start = data.get('date_start')
date_end = data.get('date_end')
(... several other validations ...)
return data
.
class AdminImageWidget(forms.FileInput):
def __init__(self, attrs={}):
super(AdminImageWidget, self).__init__(attrs)
def render(self, name, value, attrs=None):
output = []
if value and hasattr(value, "url"):
output.append(('<a target="_blank" href="%s">'
'<img src="%s" /></a> '
% (value.url, value.url_200x150)))
output.append(super(AdminImageWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))
HTML <input type="file">
fields cannot be prepopulated with data. Therefore, if validation fails on another field, you will have to re-select the image.
It's a HTML / browser security measure. As in, no way around it!
Imagine if a site could inject C:\Windows\something_important
into a form in the corner of the page?
If this is critical functionality, you could...
Here is django app, called django-file-resubmit. It solves exactly this problem.
https://github.com/un1t/django-file-resubmit
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With