Кратко: вы можете попробовать мое решение в django-admin-autocomlete-all. или сделать что-то подобное.
Длинный ответ:
Одна проблема: limit_choices_to-.. внешнего ключа источника тоже не реализован :(
Мне удалось внедрить фильтр в get_search_results() целевого ModelAdmin. Но здесь у нас есть еще одна серьезная боль. Мы можем проверить request.is_ajax and '/autocomplete/' in request.path
.
Кроме того, у нас есть только request.headers['Referer']. С помощью этого мы можем ограничить затронутые внешние ключи одной моделью. Но если у нас есть 2+ внешних ключа в одной и той же цели (скажем: две роли пользователя внутри одного и того же экземпляра модели), мы не знаем, какой из них вызывает ajax.
Моя идея заключалась в том, чтобы изменить URL-адрес. С URL-адресом запроса мне не удалось (после долгих попыток найти в DOM и в js элементы select2 и расширить URL-адрес).
Но у меня есть некоторый успех в изменении URL-адреса Referer (т.е. исходного URL-адреса страницы администратора) с помощью window.history.replaceState(). Я могу временно изменить URL-адрес, например /?key=author
, который работает всегда, если вы будете использовать django-admin-autocomplete-all, и я могу добавить почти все в URL-адрес Referer с помощью дополнительного пользовательского javascript. Особенно может быть полезно добавление текущих значений других полей формы для реализации динамической фильтрации (зависимости полей).
Так что это взлом, конечно. Но вы можете попробовать django-admin-autocomplete-all. - Подробнее в документации.
person
mirek
schedule
27.01.2020