Ultimate

Migrating from Django

The concept map for a Django app. The runbook — phases, exit conditions, stop conditions — is Migrating an existing app; this page says what each Django term becomes. As of 2026-11, against Django 6 (docs.djangoproject.com).

Concept map

DjangoUltimate
urls.py + a view that renders a templatea route file: Routes and render modes
a view that writes, a DRF viewsetan action: Actions
a modelan entity(): Entities and migrations
a queryset, a manager methoda query: Queries and live queries
makemigrations, migratex db gen "<name>", then x db migrate
startappx g resource <name> (CLI reference)
Celery tasksa job: Jobs and workflows
Celery beata task: Scheduled tasks
django.contrib.authAuth
permissions, django-guardiana policy: Policies and authz
Channelsa live query: Realtime
send_mailMail
FileField, django-storagesStorage and uploads
django.contrib.adminAdmin dashboard
gettext .po filesone flat catalog per locale: I18n
DRF's schema, drf-spectacularopenapi.json, projected from every action: Actions
pytest-django, TestCaseTesting
runserverx dev

What does not map

DjangoWhy
Python and its packagesBun only. A Python dependency is rewritten or bought as a service
MySQL, SQLite, OraclePostgres only, by design: Home
templatespages render with SolidJS; interactive parts are islands. No converter
signals (post_save)no implicit hooks: the write is an action or a mutator that says what it does (Actions)
generic relations (ContentType)model each target as its own foreign key (Entities and migrations)

Schema adoption

Django names tables <app>_<model> and ids are bigint (DEFAULT_AUTO_FIELD). Phase 1 of the runbook declares the existing tables with the physical-name overrides it gives, then x db gen until x verify --only drift agrees: Migrating an existing app.

Identity cutover

Django storesBranch
auth_user.password as pbkdf2_sha256$… — Django's default hasher⛔ stop: no PBKDF2 verifier ships, and a row in that scheme never verifies. Keep Django's login as a bridge until every user has signed in once, or force a reset (Migrating an existing app)
bcrypt_sha256$…⛔ stop for the same reason: the prefix is Django's, not a PHC string
the session: django_session rows keyed by a cookiebridge it with your own lookup behind configureAuthenticator() (Auth)

Edit this page on GitHubThis page as markdown