Интерактивная схема базы данных
Откройте Схема БД в навигации (/admin/schema с учётом вашего mount-префикса).
В схему входят все зарегистрированные таблицы с правами list и view. По умолчанию
выбраны все эти таблицы, в том числе без связей, если их не больше 100. Для большей схемы
изначально ничего не выбрано: отметьте нужные таблицы в панели выбора или нажмите Показать все.
Схема строится по метаданным адаптеров:
открытие и перестановка таблиц не читает и не изменяет значения записей.
Схема занимает доступную высоту страницы под шапкой. Более широкая панель выбора
оставляет больше места для подписей и групп; на невысоких экранах её содержимое
прокручивается, сохраняя доступ к схеме. Эта панель относится к рабочей области схемы;
полный каталог для перехода к записям находится в виде Список таблиц на главной.
При наличии более 100 доступных таблиц сначала нужно выбрать их вручную.
Работа со схемой
- Таблицы открывает панель выбора. Ищите по подписи, имени таблицы или настроенной группе,
выбирайте видимые таблицы флажками или кнопками Показать все / Скрыть все.
Поиск сокращает список в панели, не меняя схему. Нажатие на название центрирует таблицу. - Флажок группы выбирает или скрывает сразу все её таблицы. Группы соответствуют
ModelOptions(group="Sales"), как в виде Список таблиц на главной. Промежуточное состояние флажка означает,
что выбрана часть таблиц; счётчик всегда относится ко всей группе. Поиск скрывает
неподходящие варианты, но флажок группы по-прежнему меняет все её таблицы, включая
скрытые поиском. Поиск по названию группы показывает все её таблицы. Таблицы без группы
и незарегистрированные промежуточные таблицы выбираются отдельно. - В свёрнутой карточке видны первичные ключи и поля связей. Нажмите карточку или
Enter/Пробел на ней, чтобы увидеть остальные доступные поля; повторное нажатие сворачивает её. - Наведите указатель на карточку или дайте ей фокус, чтобы увидеть кнопку
Показать только связанные таблицы. Она оставляет эту таблицу и её прямых соседей
из текущего выбранного набора. Повторное нажатие возвращает прежние таблицы, позиции
и масштаб. Активная кнопка остаётся видимой; на сенсорном экране кнопки видны постоянно.
Кнопка другой карточки переключает просмотр связей в рамках исходного набора.
Изменение флажков таблиц или групп завершает временный режим и применяет новый выбор. - Линии соединяют участвующие поля. Подписи и окончания различают 1:1 · o2o,
1:N · o2m и N:M · m2m. Выбор таблицы подсвечивает её связи. - Нажмите подпись N:M, чтобы показать промежуточную таблицу и две связи 1:N.
Кнопка сворачивания на любой из этих линий возвращает логическую связь M:N.
Зарегистрированная промежуточная таблица использует существующую карточку;
незарегистрированная появляется в панели выбора после раскрытия связи. - Перетаскивайте карточки для перестановки, пустое место — для перемещения схемы.
Колесо прокручивает схему; Ctrl/⌘ + колесо и кнопки +/− меняют масштаб.
Вся схема показывает все выбранные таблицы; Автокомпоновка также сбрасывает
ручные позиции. Перемещение любой таблицы фиксирует позиции всех видимых таблиц до
следующей Автокомпоновки. Автоматическая компоновка учитывает раскрытые карточки
и отдельные группы таблиц. - Развернуть схему использует доступное место окна; Escape возвращает обычный вид.
На узком экране панель таблиц изначально свёрнута, кроме режима ручного выбора. Открыть таблицу ведёт к списку
записей выбранной зарегистрированной таблицы.
С клавиатуры стрелки перемещают выбранную карточку (Shift увеличивает шаг),
Enter/Пробел раскрывают поля и промежуточные таблицы. При фокусе на полотне +/− меняют
масштаб, 0 вмещает схему. Выбор, раскрытие и позиции сохраняются до ухода со страницы;
после перезагрузки снова применяется правило начального выбора.
Начальный выбор для больших баз данных
Если зарегистрировано много таблиц, откройте Схема БД, найдите нужные таблицы в
панели выбора и отметьте их. При превышении стандартного порога в 100 доступных таблиц
схема открывается пустой с поясняющим сообщением. Панель выбора остаётся открытой даже
на узком экране. Связи появляются по мере выбора участвующих таблиц.
Настройте это поведение при создании вашей админки с авторизацией:
admin = Admin(
auth=auth_backend, secret_key=session_secret, adapters=[adapter],
schema_auto_limit=True,
schema_table_limit=100,
)
schema_auto_limit по умолчанию равен True; schema_table_limit — положительное целое.
Порог учитывает зарегистрированные таблицы, доступные текущему пользователю после
проверки прав. При ровно 100 таблицах все они по-прежнему выбраны сразу. Настройка влияет
только на начальный выбор: все доступные таблицы остаются в поиске, а Показать все
не ограничивает их количество. Задайте schema_auto_limit=False, чтобы сразу выбирать
все таблицы, или измените schema_table_limit для своей БД. Регистрация, права и операции
с записями не меняются. Полный каталог метаданных всё равно загружается; эти параметры
не ограничивают reflection и объём метаданных, переданных браузеру.
Отображение большого набора таблиц
Показать все и schema_auto_limit=False оставляют на полотне все выбранные таблицы.
Для большого набора работа по построению линий ограничена, а при перетаскивании обновляются
карточка и её связи без пересоздания всех карточек. Перемещение полотна и масштабирование
используют существующую схему. Длинные цепочки внешних ключей не зависят от ограничения
рекурсии браузера.
Автокомпоновка переносит большие вытянутые группы в компактные столбцы и упаковывает
отдельные компоненты с учётом пропорций рабочей области. Тысячи таблиц больше не образуют
длинные разреженные полосы вокруг пустого центра. Размеры карточек по-прежнему учитывают
видимые и раскрытые поля; все выбранные таблицы остаются на схеме. Небольшие схемы сохраняют
слои связей. Вся схема вмещает существующие позиции без перестановки, а Автокомпоновка
сбрасывает ручные позиции и рассчитывает расположение под текущий размер окна.
В плотной схеме линия может пересечь постороннюю карточку, если поиск свободного обхода
занимает слишком много работы. Выберите начало или конец связи, чтобы подсветить её,
либо скройте лишние таблицы в панели. Для небольшого набора сохраняется полноценный поиск
пути в обход карточек.
Адаптер SQL reflection повторно использует метаданные связей текущего снимка схемы.
После миграций вызовите await adapter.refresh() перед перезагрузкой страницы, чтобы
увидеть добавленные или удалённые внешние ключи и изменения уникальности;
см. SQL reflection. Кеш содержит только физические метаданные; права
и видимость полей проверяются заново при каждом запросе схемы.
Права и видимость полей
Нужны авторизация и оба права list и view на каждую таблицу. Связи с недоступными
таблицами и через скрытые поля соединения не показываются. В группы и их счётчики входят
только доступные таблицы; группы без доступных таблиц отсутствуют. Видимость полей определяется
ModelOptions, включая стандартное скрытие полей с учётными данными. Зарегистрированная
промежуточная таблица с ограниченными правами не появляется повторно как техническая карточка.
Незарегистрированная промежуточная таблица показывает только метаданные полей от адаптера,
без полей учётных данных. У неё нет перехода к записям и CRUD. Зарегистрируйте и настройте
её как таблицу, если нужны дополнительные ограничения видимости полей приложения.
Схема использует общие токены темы — см. кастомизацию интерфейса.
Встроенный JavaScript разрешён точным SHA-256 CSP-хешем и SRI только на этой странице.
Политика скриптов собственных страниц не меняется.
Собственные адаптеры
Для обычных линий достаточно существующего RelationAdapter.relations().
Необязательные Relation.source_key_fields и target_key_fields описывают реальные
поля соединения, в том числе альтернативные уникальные ключи. through называет
промежуточную таблицу M:N, junction задаёт её поля и внешние ключи обеих сторон:
from quite_admin import Field, Junction, Relation
Relation(
name="tags", target=Tag, kind="many_to_many",
source_key_fields=("id",), target_key_fields=("id",), through="product_tags",
junction=Junction(
name="product_tags",
fields=(
Field("product_id", int, primary_key=True),
Field("tag_id", int, primary_key=True),
),
source_fields=("product_id",), target_fields=("tag_id",),
model=ProductTag, # необязательно: зарегистрированная модель промежуточной таблицы
),
)
Метаданные промежуточной таблицы не требуют первичного ключа. Необязательный sync/async
schema_relations(model) может отдавать сведения только для схемы, не меняя редактируемые
связи. Встроенный адаптер SQLAlchemy также показывает физические FK без ORM relationship().
Версия API адаптера остаётся 1.
