ojuso-map/apps/map/widgets.py
Anna Sidwell 79dffadd14 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.
2018-10-12 18:34:39 -04:00

56 lines
1.4 KiB
Python

import json
from django.forms import widgets
from apps.files.models import File
class CommaSeparatedTextInput(widgets.HiddenInput):
def format_value(self, value):
try:
value = ','.join(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:
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