0008_document_sort_no.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. """方案拖动排序:doc_document 新增 sort_no。
  2. Revision ID: 0008_document_sort_no
  3. Revises: 0007_document_description
  4. Create Date: 2026-08-18
  5. 变更要点:
  6. 1. doc_document 新增 sort_no(INT,非空,默认0)。
  7. 2. 用途:管理员在方案管理页拖动主案/子方案排序——主案在全局范围内
  8. 排序,子方案在所属主案内排序;共享附件库不参与拖动排序。
  9. 3. 存量数据保持0,列表按 (sort_no, id) 升序退化为创建顺序;首次拖动
  10. 重排后按步长10重新编号。
  11. """
  12. from __future__ import annotations
  13. from collections.abc import Sequence
  14. from alembic import op
  15. import sqlalchemy as sa
  16. revision: str = "0008_document_sort_no"
  17. down_revision: str | None = "0007_document_description"
  18. branch_labels: str | Sequence[str] | None = None
  19. depends_on: str | Sequence[str] | None = None
  20. _TABLE = "doc_document"
  21. _COLUMN = "sort_no"
  22. def _existing_columns(table: str) -> set[str]:
  23. inspector = sa.inspect(op.get_bind())
  24. return {item["name"] for item in inspector.get_columns(table)}
  25. def upgrade() -> None:
  26. if _COLUMN not in _existing_columns(_TABLE):
  27. op.add_column(
  28. _TABLE,
  29. sa.Column(_COLUMN, sa.Integer(), nullable=False, server_default=sa.text("0")),
  30. )
  31. def downgrade() -> None:
  32. if _COLUMN in _existing_columns(_TABLE):
  33. op.drop_column(_TABLE, _COLUMN)