Я разработал решение, которое я опубликую здесь на случай, если кому-то будет интересно.
Как я уже упоминал, атрибут 'disabled' не позволяет любой форме данных получить POSTed. Это означает, что в поле MultipleSelect не может быть выбран тот, который отключен, и выбор POSTed является единственным, добавленным в базу данных (отключенный «удален»).
Для того, чтобы обойти это I присвоил полю атрибут «только для чтения», который я позже настроил с помощью CSS, и сделал его по своему вкусу небольшим скриптом JS. Вот код:
- Установка атрибута только для чтения (DJANGO)
def create_option(self, *args, **kwargs):
options_dict = super().create_option(*args, **kwargs)
selected = options_dict['selected']
value = options_dict['value']
#This is my own custom logic. It can be altered of course
if options_dict['label'] != str(self.request.user.profile):
#This is where the attribute is set!
options_dict['attrs']['class'] = 'readonly'
- Настройка поля только для чтения, чтобы оно выглядело серым и «отключен» (CSS)
input.readonly {
opacity : .50;
filter : alpha(opacity=50); /* IE<9 */
cursor : default;
}
- Небольшой скрипт для предотвращения манипулирования полем:
$('input.readonly').on('click', function(evt) {
evt.preventDefault();
})