Launch Week Day 3: Introducing Organization Notifications in Socket.Learn More
Socket
Book a DemoSign in
Socket

django-dbml

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

django-dbml

Django extension aimed to generate DBML from installed models.

pipPyPI
Version
1.1.2
Maintainers
1

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,<6.0

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

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 bigint [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

Keywords

django

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts