1. Django 동적 모델 및 테이블 생성

django는 makemigrations, migrate 명령어를 통하여 테이블 생성한다.
이때 웹서버는 실행중일 경우 중단하고 다시 재시작한다.

운영환경에 따라서 웹서버가 중단되지 않고 운영이 필요한경우에는 위의 방법이 아닌 동적 모델 및 테이블 생성방법이 필요하다.


2. 예시코드

2.1. 상속받을 추상모델 작성

models.py

from django.db import models

class Board(models.Model):
	title = models.CharField(max_length=100)
	contents = models.CharField(max_length=500)
	
    class Meta:
        abstract = True

2.2. 동적 모델 생성 및 삭제

from .models import Board

TABLE_MAP = {}

def create_model(name: str):
	'''
	동적 모델 생성
	'''
	baseclass = Board
	tablename = board2
	# attrs 를 dict 형태로 지정한다.
	class Meta:
		db_table = tablename
	attrs = {
		'__module__': baseclass.__module__,
		'Meta': Meta,
	}
	# 클래스 타입을 지정하여 객체(클래스 명, 복사 참조 클래스, 속성값)를 지정한다. 
	TABLE_MAP[name] = type(name, (baseclass,), attrs)

def delete_model(name: str):
	'''
	동적 모델 삭제
	'''
	del TABLE_MAP[name]

2.3. 동적 테이블 생성 및 삭제

from django.db import connection

def create_table(name: str):
	'''
	동적 테이블 생성
	'''
	with connection.schema_editor() as schema_editor:
		schema_editor.create_model(TABLE_MAP[name])

def delete_table(name: str):
	'''
	동적 테이블 삭제
	'''
	with connection.schema_editor() as schema_editor:
		schema_editor.delete_model(TABLE_MAP[name])

참고(Reference)