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
What does not map
| Django | Why |
|---|
| Python and its packages | Bun only. A Python dependency is rewritten or bought as a service |
| MySQL, SQLite, Oracle | Postgres only, by design: Home |
| templates | pages 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 stores | Branch |
|---|
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 cookie | bridge it with your own lookup behind configureAuthenticator() (Auth) |