Skip to main content

django-dbml

django-dbml is a Django app that generates a DBML schema from your Django models.

It is useful when you want to:

  • visualize your schema in tools that understand DBML
  • document an existing Django project
  • export a model-based schema for reviews, planning, or onboarding

The generated output includes:

  • tables
  • foreign key and one-to-one relationships
  • autogenerated many-to-many join tables
  • indexes and unique constraints
  • enums derived from Django field choices
  • notes derived from model and field metadata

Requirements

  • Python >=3.11
  • Django >=4.2,<7.0

Every supported Python and Django combination is exercised in CI; see docs/development.md for the matrix.

Installation

Install the package:

pip install django-dbml

Add django_dbml to INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    "django_dbml",
]

Quick Start

Generate DBML for all installed models:

python manage.py dbml

Write the schema to a file:

python manage.py dbml --output_file schema.dbml

Generate DBML for a single app:

python manage.py dbml billing

Generate DBML for a single model:

python manage.py dbml billing.Invoice

When you target a specific app or model, django-dbml also includes the forward-related tables needed to keep the schema usable.

Command Reference

The management command is:

python manage.py dbml [app_label[.ModelName] ...] [options]

Supported options:

  • --output_file PATH Write the generated DBML to a file instead of stdout.
  • --table_names Use the underlying database table names instead of Django model labels such as app_label.ModelName.
  • --group_by_app Add TableGroup blocks grouped by app/module.
  • --color_by_app Add headercolor to each table based on its app/module.
  • --add_project_name NAME Set the DBML project name.
  • --add_project_notes TEXT Set the DBML project notes.
  • --disable_update_timestamp Do not append the Last Updated At ... UTC line to the project notes.

Examples

Generate the whole project

python manage.py dbml --add_project_name "Backoffice"

Generate a subset of apps

python manage.py dbml accounts billing crm

Generate a subset of models

python manage.py dbml billing.Invoice billing.InvoiceLine

Save output to a file

python manage.py dbml --output_file docs/schema.dbml

Use physical table names instead of model labels

python manage.py dbml --table_names

Add project metadata

python manage.py dbml \
  --add_project_name "Commerce Platform" \
  --add_project_notes "Generated from production models." \
  --output_file schema.dbml

Group and color tables by app

python manage.py dbml --group_by_app --color_by_app

How Metadata Is Mapped

django-dbml extracts useful schema notes from Django metadata when available.

Model-level metadata:

  • model docstrings are emitted as table notes
  • db_table_comment is emitted as a table note
  • when --table_names is not used, the DB table name is added to the note

Field-level metadata:

  • help_text is emitted as a field note
  • verbose_name is emitted as a field note
  • db_comment is emitted as a field note
  • choices are converted into DBML enums
  • default, null, unique, and primary key information are included in field attributes

Relationship handling:

  • ForeignKey is rendered as a one-to-many reference
  • OneToOneField is rendered as a one-to-one reference
  • autogenerated ManyToManyField join tables are rendered as explicit DBML tables and references
  • a relation column is typed by the column it points at, not by the relation itself, so a foreign key to a BigAutoField primary key is rendered as big_auto

Example Output

Example command:

python manage.py dbml library --add_project_name "Library"

Example shape of the generated DBML:

Project "Library" {
  database_type: 'PostgreSQL'
  Note: '''Generated from Django models.
  Last Updated At 03-30-2026 02:15PM UTC'''
}

Table library.Book {
  title char [not null]
  author_id big_auto [not null]
}

ref: library.Book.author_id > library.Author.id

The exact output depends on your models, database backend, indexes, choices, and comments.

Development

This repository is managed with uv.

Bootstrap the environment:

make sync

Common commands:

make test
make lint
make build

Run the test suite against a specific Django series:

make test-django DJANGO_CONSTRAINT="django>=5.1,<5.2" PYTHON=3.13

More development details are available in CONTRIBUTING.md and docs/development.md.

Contributors

Thanks to the people who helped improve this project through patches and pull requests, including:

  • Michel Wilhelm
  • Ee Durbin
  • Mathieu Hinderyckx
  • Rebecca Sutton Koeser
  • Evgeny
  • Nick Budak
  • jcp
  • johnecon

Credits

The initial code was based on https://github.com/hamedsj/DbmlForDjango

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_dbml-1.2.0.tar.gz (18.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_dbml-1.2.0-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file django_dbml-1.2.0.tar.gz.

File metadata

  • Download URL: django_dbml-1.2.0.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for django_dbml-1.2.0.tar.gz
Algorithm Hash digest
SHA256 7f1af2a35e173be04acf0a84d6046df713420d51f957563fc90c9913de62c32b
MD5 c1b50b109aac644694623478d3db00eb
BLAKE2b-256 f057ab184ad95603bb379d773cfd414495c0ffa97c028924b60d249043cceb41

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_dbml-1.2.0.tar.gz:

Publisher: production.yml on makecodes/django-dbml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_dbml-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: django_dbml-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for django_dbml-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fa28fcb0b8d6092738022fb2538d39451aa8e0f006cf6cb33a27bf1c29f2591a
MD5 8877be2ad1ed3967e2e07fabade877b0
BLAKE2b-256 010e71d22956358785a82dd7735feceee64ba0a771cbc5b6be382a2303b1fbdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_dbml-1.2.0-py3-none-any.whl:

Publisher: production.yml on makecodes/django-dbml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 files

1.1.2

2 files

0.11.0

2 files

0.10.1

2 files

0.10.0

2 files

0.9.2

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.5

2 files

0.3.4

1 file

0.3.3

1 file

0.3.2

1 file

0.3.1

1 file

0.3.0

1 file

0.2

1 file

0.1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page