Параметр STATICFILES_DIRS отключает переопределение виджета администратора.

У меня возникли проблемы с пониманием того, как статические файлы обрабатываются в Django. Я прочитал официальную документацию Django, а также несколько потоков, в том числе этот замечательный здесь:

Различия между STATICFILES_DIR, STATIC_ROOT и MEDIA_ROOT

Большинство людей определяют список STATICFILES_DIRS как список путей, по которым django будет искать дополнительные статические файлы помимо статической папки приложения.

Я это понимаю, но какое это имеет отношение к полям формы, которые я переопределяю в своем admin.py? Я заменил форму ManyToMany по умолчанию на виджет FilteredSelectMultiple в нескольких моих моделях администрирования, например так:

from django.contrib.admin.widgets import FilteredSelectMultiple

formfield_overrides = {
    models.ManyToManyField: {'widget': FilteredSelectMultiple("User Names", is_stacked=False)}
}

Это отлично работает и дает переопределение виджета, которое я хотел: Снимок экрана функционального виджета

Однако, когда я определяю STATICFILES_DIRS в settings.py, чтобы включить мою корневую статическую папку следующим образом:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static/'),
)

Это нарушает мое переопределение и по умолчанию возвращается к исходной форме поля ManyToMany: Снимок экрана сломанного виджета

STATIC_ROOT не определен в файле settings.py, поскольку мы не планируем использовать функцию сбора статики. Мы планируем хранить/ссылаться на наши статические файлы в корневой статической папке. Также в наших settings.py у нас есть:

STATIC_URL = '/static/'

Я не понимаю, как эти настройки для работы со статическими файлами мешают приведенному выше formfield_override. Я был бы признателен за некоторое понимание этого, чтобы я мог найти способ подойти к этой проблеме.

Спасибо!


person Yamen Alghrer    schedule 12.11.2019    source источник


Ответы (1)


Я выяснил причину моей проблемы. Я пропустил эту часть в документации Django, которая объясняет STATICFILES_FINDERS: STATICFILES_STORAGE Документация

введите здесь описание изображения

Оказывается, мой производственный сервер сначала находил статические файлы в моей внешней корневой папке, которые не были обновлены. Это объясняет, почему я не видел своих изменений. Я собираюсь перенастроить способ обработки статических файлов, чтобы гарантировать, что внешняя корневая статическая папка, которую просматривает мой рабочий сервер, всегда содержит последние статические файлы с помощью функции collectstatic.

person Yamen Alghrer    schedule 15.11.2019