Проблема django-autocomplete-light! Новая версия chrome
У меня есть django приложение с python 3.7 и Django 2.2.10, которое использует django admin, с materialize css subscript для шаблонов. После последних обновлений Chrome, поведение форм в модале показывает проблему рендеринга.
Виджет был настроен под формы:
class Select2Widget(Select2WidgetMixin):
def _get_language_code(self):
return 'pt-BR'
@property
def media(self):
"""Return JS/CSS resources for the widget."""
return forms.Media(
js=(
'autocomplete_light/jquery.init.js',
STATIC_URL + 'js/select2.full.js',
# 'vendor/select2/dist/js/select2.full.js',
'autocomplete_light/autocomplete.init.js',
'autocomplete_light/forward.js',
'autocomplete_light/select2.js',
'autocomplete_light/jquery.post-setup.js',
),
css={
'screen': (
'vendor/select2/dist/css/select2.min.css',
'admin/css/autocomplete.css',
'autocomplete_light/select2.css',
),
},
)
autocomplete_function = 'select2'
"""
retorna queryset na ordem que foi selecionado no field
"""
class QuerySetSelect(WidgetMixin):
def filter_choices_to_render(self, selected_choices):
preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumerate(selected_choices)])
"""Filter out un-selected choices if choices is a QuerySet."""
self.choices.queryset = self.choices.queryset.filter(pk__in=[c for c in selected_choices if c]).order_by(preserved)
class ModelSelect2(QuerySetSelectMixin, Select2Widget, forms.Select):
...
class ModelSelect2Multiple(QuerySetSelectMixin, Select2Widget, forms.SelectMultiple):
...
class Select2Multiple(Select2Widget, SelectMultiple):
...
Используйте ниже в формах
Вот в чем проблема... В других браузерах все работает
Я пробовал использовать другие библиотеки, но это не помогает. Я искал в сообществах и не нашел ответа на эту проблему.
Django-autocomplete-light не работает в хроме с 24.07.2024, потому что в последних версиях Chrome отключено событие DOMNodeInserted
. doc
DOMNodeInserted
событие было устаревшим с 2011 года и теперь окончательно удалено.
Вы все еще можете использовать Firefox, все работает нормально.
p.s. Я рекомендую использовать стандартный Django-autocomplete, появившийся в Django v.2, который очень легко реализовать вместо DAL.
p.p.s Я обновлю этот ответ советами по рефакторингу, потому что я как раз сейчас нахожусь в процессе рефакторинга DAL в большом старом Django-проекте.
p.p.p.s. У меня есть рефакторинговая версия для обычного django autocomplete.js, но она понадобится вам только после перехода с DAL на DA. Вы можете найти ее в моем докладе о django-admin здесь.