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:
@ -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
|
||||
|
Reference in New Issue
Block a user