# common/fields.py from django.forms import Select class ReadOnlySelect(Select): """ A "Select" widget that presents as a disabled select input, but also renders a hidden field with the field's name and selected value so that it is represented in the submitted form. """ template_name = 'common/readonly_select.html' def __init__(self, attrs=None, **kwargs): if attrs is None: attrs = {} attrs.update({'disabled': True}) super().__init__(attrs=attrs, **kwargs) # common/readonly_select.html {% include 'django/forms/widgets/select.html' %}