728x90
class User(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20, blank=True, null=True)
age = models.IntegerField
class Meta:
managed = False
db_table = 'users'
보통은 Meta를 사용해 db_table 명을 지정하게 됩니다.
고정적으로 해당 모델은 하나의 DB를 사용한다 했을 때 사용합니다.
저는 이번에 날짜나 숫자에 따른 DB 테이블을 적용하기 위한 방법으로 사용해보았습니다.
class MarketExportResult(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20, blank=True, null=True)
age = models.IntegerField()
@classmethod
def set_db_table(cls, table_name):
cls._meta.db_table = table_name
classmethod를 이용하여 table_name을 받아 db_table을 지정하게 했습니다.
User.set_db_table(f"users_240501")
users_240501 테이블을 사용하도록 했습니다.
------------------------------------------------------------------------추가-----------------------------------------------------------------------------------해당 방법으로의 문제는 한번 생성된 모델이 set_db_table을 통해 table_name이 변경되지 않는 점.
from django.db import models
def create_model(table_name):
class Meta:
managed = False # Django에 의한 모델 관리를 비활성화
db_table = table_name # 동적으로 테이블 이름 설정
model_class = type(
f'UserModel_{table_name}',
(models.Model,),
{
'__module__': __name__,
'id': models.AutoField(primary_key=True),
'name': models.CharField(max_length=20, blank=True, null=True),
'age': models.IntegerField(),
'Meta': Meta
}
)
return model_class
동적으로 model을 생성하여 사용할 수 있도록 합니다.
UserModel240501 = create_model('users_240501')
UserModel240502 = create_model('users_240502')
728x90
'파이썬' 카테고리의 다른 글
pandas dataframe 이미지 테이블 export시 style로 멀티 인덱스 보이지 않게 하기 (0) | 2024.01.04 |
---|---|
파이썬 APScheduler 실행해보기 (0) | 2023.12.13 |
pyqt pyside scrollArea QScrollArea 맨 위로 스크롤 하기 (0) | 2023.12.04 |
파이썬 pyqt QComboBox style (0) | 2023.11.22 |
파이썬 pyqt pyside qcheckbox 테두리 style (1) | 2023.11.21 |