pulseapi/utility/form_fields.py (18 lines of code) (raw):
import uuid
from django.forms import fields, widgets
class TemporaryCheckboxInput(widgets.CheckboxInput):
template_name = 'widgets/temporary_checkbox.html'
def value_from_datadict(self, data, files, name):
value = data.get(name)
# If the checkbox was unchecked, the value of the temporary checkbox is None
if value is None:
return value
# Checks if the checkbox was checked and it already had a uuid assigned to it, so that we don't
# regenerate a new uuid on saving an instance where the checkbox wasn't modified
try:
value = uuid.UUID(value)
# If the checkbox was changed from unchecked to checked, the value will not be an existing uuid (in the
# current django version the value is on) so we need to generate a new uuid for this input.
except ValueError:
value = uuid.uuid4()
return value
class TemporaryField(fields.UUIDField):
widget = TemporaryCheckboxInput
def __init__(self, *args, **kwargs):
kwargs['required'] = False
super().__init__(*args, **kwargs)