Restore names of uploaded files on submit/draft restore (#65)

This involved turning the list of file IDs stored in the hidden
text field into JSON.
This commit is contained in:
2018-10-12 18:30:47 -04:00
parent b5ccbf631d
commit 79dffadd14
5 changed files with 93 additions and 38 deletions

View File

@ -1,4 +1,7 @@
import json
from django.forms import widgets
from apps.files.models import File
class CommaSeparatedTextInput(widgets.HiddenInput):
@ -19,3 +22,34 @@ class CommaSeparatedTextInput(widgets.HiddenInput):
return value.split(',')
except AttributeError:
return None
def idToDict(id):
file = File.objects.get(pk=id)
return dict(id=id, name=file.name())
# For clarity:
# the canonical format is a list of integers (IDs of files)
# the input/display format is a string containing a JSON list of {id=x, name=y} objects
class JSONFileListWidget(widgets.HiddenInput):
def format_value(self, value):
try:
value = [ idToDict(id) for id in value ]
value = json.dumps(value)
except TypeError:
value = ''
return super().format_value(value)
def value_from_datadict(self, data, files, name):
value = super().value_from_datadict(data, files, name)
if value == '':
return None
try:
filelist = json.loads(value)
return [ file['id'] for file in filelist ]
except JSONDecodeError:
return None