LoginSignup
2
0

More than 3 years have passed since last update.

Djangoでテーブル構成の出力

Posted at

はじめに

Djangoのアプリでテーブル構成の図を出力する際につまずいたので備忘録として記事にしました。
業務の中でアノテーションツールとしてDoccanoをcloneして使用させていただいているのですが、テーブルの構成がどのようになっているか確認したい場面がありました。
Doccanoの開発環境はDockerで作成されています。

使用するライブラリ

ER図の出力にはdjango-extensionのgraph_modelsを使用しました。

手順

Doccanoのdocker-compose.ymlはdevelopmentとproductionで分かれています。

docker-compose.dev.yml

version: "3.7"
services:

  backend:
    image: python:3.6
    volumes:
      - .:/src
      - venv:/src/venv
    command: ["/src/app/tools/dev-django.sh", "0.0.0.0:8000"]
    environment:
      ADMIN_USERNAME: "admin"
      ADMIN_PASSWORD: "password"
      ADMIN_EMAIL: "admin@example.com"
      DATABASE_URL: "postgres://doccano:doccano@postgres:5432/doccano?sslmode=disable"
      ALLOW_SIGNUP: "False"
      DEBUG: "True"
    ports:
      - 8000:8000
    depends_on:
      - postgres
    networks:
      - network-backend
      - network-frontend

  frontend:
    image: node:13.7.0
    command: ["/src/frontend/dev-nuxt.sh"]
    volumes:
      - .:/src
      - node_modules:/src/frontend/node_modules
    ports:
      - 3000:3000
    depends_on:
      - backend
    networks:
      - network-frontend

  postgres:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      POSTGRES_USER: "doccano"
      POSTGRES_PASSWORD: "doccano"
      POSTGRES_DB: "doccano"
    networks:
      - network-backend

volumes:
  postgres_data:
  node_modules:
  venv:

networks:
  network-backend:
  network-frontend:

ここからライブラリをインストールしていきます。
src/requirements.txtに以下の三行を追加します。

requirements.txt
graphviz
pydotplus
django-extensions

コンテナを立ち上げていきます。

docker-compose -f docker-compose.dev.yml up #コンテナの立ち上げ
docker ps #コンテナ名を確認
docker exec -it doccano_backend_1 bash #bashに入る

次にコンテナのbashの中で作業していきます。

cd src #srcに移動
pip install -r requirements.txt #ライブラリのインストール
apt install graphviz #graphvizのインストール

続いてapp/settings.pyのINSTALLED_APPSにdjango_extensionsを追加します。

setting.py
INSTALLED_APPS = [
    'whitenoise.runserver_nostatic',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'server.apps.ServerConfig',
    'api.apps.ApiConfig',
    'widget_tweaks',
    'rest_framework',
    'rest_framework.authtoken',
    'django_filters',
    'social_django',
    'polymorphic',
    'webpack_loader',
    'corsheaders',
    'drf_yasg',
    'django_extensions' 追加
]

docker-compose downで一度コンテナを落として再度立ち上げます。

docker-compose -f docker-compose.dev.yml up --force-recreate

再度コンテナのbashに入り、ER図を出力してきます。

docker exec -it doccano_backend_1 bash
cd src #srcに移動
source venv/bin/activate #仮想環境に入る
cd src/app #manage.pyがあるディレクトリに移動
python3 manage.py graph_models -a -g -o graph-model.pdf #ER図を出力

Doccanoではホストのディレクトリにコンテナのsrc以下がマウントされているのでそのままホストの側からpdfを開くことができます。

参考にした記事

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0