Added file uploads. Fixes #141 and #241

This commit is contained in:
Camilo Nova 2017-11-06 11:31:00 -05:00
parent 15b9e73cb8
commit 23e8557c83
2 changed files with 22 additions and 7 deletions

View file

@ -1,11 +1,13 @@
from collections import OrderedDict
from datetime import datetime, date, time, timedelta
from decimal import Decimal
import hashlib
from operator import itemgetter
from collections import OrderedDict
import hashlib
import os
from django import forms, VERSION
from django.apps import apps
from django.conf import settings as django_settings
from django.conf.urls import url
from django.contrib import admin, messages
from django.contrib.admin import widgets
@ -20,9 +22,9 @@ from django.utils.formats import localize
from django.utils.module_loading import import_string
from django.utils.translation import ugettext_lazy as _
from . import LazyConfig, settings
config = LazyConfig()
@ -133,6 +135,14 @@ class ConstanceForm(forms.Form):
self.initial['version'] = version_hash.hexdigest()
def save(self):
for file_field in self.files:
file = self.cleaned_data[file_field]
file_path = os.path.join(django_settings.MEDIA_ROOT, file.name)
with open(file_path, 'wb+') as destination:
for chunk in file.chunks():
destination.write(chunk)
self.cleaned_data[file_field] = file.name
for name in settings.CONFIG:
if getattr(config, name) != self.cleaned_data[name]:
setattr(config, name, self.cleaned_data[name])
@ -180,8 +190,10 @@ class ConstanceAdmin(admin.ModelAdmin):
'value': localize(value),
'modified': localize(value) != localize(default),
'form_field': form[name],
'is_file': isinstance(form[name].field.widget, forms.FileInput),
'is_checkbox': isinstance(
form[name].field.widget, forms.CheckboxInput),
form[name].field.widget, forms.CheckboxInput
),
}
return config_value
@ -202,7 +214,9 @@ class ConstanceAdmin(admin.ModelAdmin):
form_cls = self.get_changelist_form(request)
form = form_cls(initial=initial)
if request.method == 'POST':
form = form_cls(data=request.POST, initial=initial)
form = form_cls(
data=request.POST, files=request.FILES, initial=initial
)
if form.is_valid():
form.save()
messages.add_message(

View file

@ -1,4 +1,4 @@
{% load admin_static admin_list i18n %}
{% load admin_static admin_list static i18n %}
<table>
<thead>
<tr>
@ -18,12 +18,13 @@
</td>
<td>
{{ item.form_field.errors }}
{% if item.is_file %}{% trans "Current file" %}: <a href="{% get_media_prefix as MEDIA_URL %}{{ MEDIA_URL }}{{ item.value }}" target="_blank">{{ item.value }}</a>{% endif %}
{{ item.form_field }}
<br>
<a href="#" class="reset-link" data-field-id="{{ item.form_field.auto_id }}" data-default="{% spaceless %}
{% if item.is_checkbox %}{% if item.raw_default %} true {% else %} false {% endif %}
{% else %}{{ item.default }}{% endif %}
{% endspaceless %}">Reset to default</a>
{% endspaceless %}">{% trans "Reset to default" %}</a>
</td>
<td>
{% if item.modified %}