ojuso-map/apps/map/widgets.py
2019-08-20 00:10:20 +02: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 json.JSONDecodeError:
return None