Skip to content

Instantly share code, notes, and snippets.

@rg3915
Last active December 29, 2023 03:04
Show Gist options
  • Save rg3915/8aa0ebded6500f4cb162f7dd0f1d787d to your computer and use it in GitHub Desktop.
Save rg3915/8aa0ebded6500f4cb162f7dd0f1d787d to your computer and use it in GitHub Desktop.
generate django mermaid diagram
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

O primeiro exemplo é se você usa a estrutura tradicional, da app fora da pasta do projeto.

project
app
python generate_mermaid_diagram1.py

E o segundo é se você usa a app dentro da pasta do projeto.

project
    app
python generate_mermaid_diagram2.py
import os
from django.db import models
from django import setup
from django.apps import apps
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")
setup()
def get_model_fields(model):
"""
Retorna uma lista de campos do modelo.
"""
return [(field.name, field.get_internal_type()) for field in model._meta.fields]
def generate_mermaid_class_diagram(app_name):
"""
Gera um diagrama de classe Mermaid para todos os modelos em um aplicativo Django.
"""
_models = apps.get_app_config(app_name).get_models()
diagram = "classDiagram\n"
for model in _models:
diagram += f" class {model.__name__} {{\n"
fields = get_model_fields(model)
for field_name, field_type in fields:
diagram += f" + {field_name}: {field_type}\n"
diagram += " }\n"
_models = apps.get_app_config(app_name).get_models()
for model in _models:
for field in model._meta.get_fields():
if isinstance(field, models.ForeignKey):
related_model = field.related_model.__name__
# Modificação para representar corretamente a cardinalidade
if field.one_to_many:
diagram += f"{model.__name__} \"1\" --> \"0..n\" {related_model}\n"
else:
diagram += f"{model.__name__} <-- {related_model}\n"
return diagram
if __name__ == "__main__":
app_name = "core" # Substitua pelo nome do seu aplicativo Django
mermaid_diagram = generate_mermaid_class_diagram(app_name)
with open("class_diagram.mermaid", "w") as f:
f.write(mermaid_diagram)
print("Diagrama de classe Mermaid gerado com sucesso!")
import os
from django.db import models
from django.apps import apps
def get_model_fields(model):
"""
Retorna uma lista de campos do modelo.
"""
return [(field.name, field.get_internal_type()) for field in model._meta.fields]
def generate_mermaid_class_diagram(app_name):
"""
Gera um diagrama de classe Mermaid para todos os modelos em um aplicativo Django.
"""
# Certifique-se de que o DJANGO_SETTINGS_MODULE esteja configurado corretamente
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")
# Importe o módulo de configurações para configurar o Django
import django
django.setup()
_models = apps.get_app_config(app_name).get_models()
diagram = "classDiagram\n"
for model in _models:
diagram += f" class {model.__name__} {{\n"
fields = get_model_fields(model)
for field_name, field_type in fields:
diagram += f" + {field_name}: {field_type}\n"
diagram += " }\n"
_models = apps.get_app_config(app_name).get_models()
for model in _models:
for field in model._meta.get_fields():
if isinstance(field, models.ForeignKey):
related_model = field.related_model.__name__
# Modificação para representar corretamente a cardinalidade
if field.one_to_many:
diagram += f"{model.__name__} \"1\" --> \"0..n\" {related_model}\n"
else:
diagram += f"{model.__name__} <-- {related_model}\n"
return diagram
if __name__ == "__main__":
app_name = "core" # Substitua pelo nome do seu aplicativo Django
mermaid_diagram = generate_mermaid_class_diagram(app_name)
with open("class_diagram.mermaid", "w") as f:
f.write(mermaid_diagram)
print("Diagrama de classe Mermaid gerado com sucesso!")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment