# 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' %}
<input type="hidden" name="{{ widget.name }}" value="{{ widget.value.0 }}">