Экспорт таблиц

Откройте список таблицы, примените поиск и фильтры, выберите
сортировку и раскройте Экспорт данных. Отметьте столбцы, выберите CSV или XLSX
и нажмите Скачать. Выгружаются все подходящие записи со всех страниц. Пагинация
не ограничивает файл, а выбор столбцов влияет только на выгрузку.

Начальный набор соответствует столбцам списка. Можно добавить другие видимые поля и
поля соседних таблиц через один переход по связи. Одиночная связь даёт одно значение;
отсутствующая — пустую ячейку. Для 1:N и M:N каждое связанное значение занимает отдельную
строку внутри ячейки. Столбцы одной связи используют одинаковый порядок записей.
На исходную запись приходится одна строка выгрузки, без перемножения таблиц.

Это JOIN через обнаруженные связи и контракт адаптера, а не произвольный SQL JOIN.
Поддерживаются встроенные адаптеры связей и составные ключи. Учитываются настройки связей,
видимость полей обеих таблиц и права list/view на целевую таблицу. Вложенные JOIN,
произвольные условия соединения и фильтры по неключевым полям связанной таблицы не
поддерживаются. Фильтры списка по ключу связи ограничивают исходные записи, но не
обрезают выгружаемую связанную таблицу. Большие аналитические выгрузки лучше делать
через сервис приложения.

ORM не обязательна: SQLAdapter выгружает обнаруженные SQL-таблицы с тем же
выбором столбцов, фильтрами и форматами. Внешние ключи автоматически открывают
связанные столбцы. Для собственных адаптеров достаточно обычного контракта list
для основных полей; связанные столбцы требуют RelationAdapter и BatchRelationAdapter.

Форматы и безопасность

  • CSV: UTF-8 с BOM, разделитель — запятая; значения с переносами заключаются в кавычки.
    Перед префиксами формул добавляется апостроф. Если локаль таблицы ожидает другой
    разделитель, укажите UTF-8 и запятую при импорте.
  • XLSX: настоящая книга Excel с текстовыми ячейками, переносами и без формул. Текст
    сохраняет UUID, ведущие нули, точность Decimal и больших целых. Даты записываются
    в ISO, NULL — пустая ячейка. Для вычислений преобразуйте нужные столбцы в числа.
    JSON/JSONB-поля остаются отформатированным текстом поля.

Оба формата используют форматтеры полей. Для экспорта нужны права list и view на
исходную таблицу; для связанных данных — такие же права на целевую. Скрытое поле
нельзя выгрузить подменой URL. Ответ содержит Cache-Control: no-store. Защита CSV
намеренно меняет строки, похожие на формулы; XLSX сохраняет их как обычный текст.

Лимиты: 10 000 исходных записей или 1 000 при выборе связанных столбцов; до 1 000 записей
в каждой связанной таблице и 10 000 связанных записей суммарно; до 100 столбцов и
32 МиБ отформатированных UTF-8-данных/выходного файла. XLSX ограничивает ячейку 32 767
единицами UTF-16. Превышение возвращает HTTP 413 вместо частичной выгрузки. Уточните
фильтры; для очень длинных ячеек выберите CSV. Ошибочные фильтры возвращают 422.

Чтение не является снимком БД и может видеть конкурентные изменения. Экспорт не меняет данные и
использует ту же авторизацию и права чтения, что и просмотр записей.

Квадратная кнопка выгрузки рядом с поиском открывает компактную панель. Escape или
нажатие снаружи закрывает её; без JavaScript панель работает как нативный disclosure.

Встроенные адаптеры загружают связи ограниченными пакетами: один JOIN-запрос на связь.
Пользовательские адаптеры могут реализовать BatchRelationAdapter.related_batch(model, name, keys, limit=...) из quite_admin.relations. Результат RelatedBatch содержит
записи по токенам исходных ключей. Если лимит мог скрыть записи, установите
truncated=True: экспорт вернёт 413. Для экспорта связей пакетный метод обязателен; построчного fallback нет.
Адаптеры без него экспортируют только собственные поля. Встроенные адаптеры используют
пакеты автоматически, без настройки. Права и лимиты не меняются.