"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 공유 스키마와 동적 이름을 사용하여 여러 테이블에 대해 Django 모델을 어떻게 동적으로 생성할 수 있나요?

공유 스키마와 동적 이름을 사용하여 여러 테이블에 대해 Django 모델을 어떻게 동적으로 생성할 수 있나요?

2024-11-04에 게시됨
검색:694

How can Django models be dynamically created for multiple tables with shared schemas and dynamic names?

Django의 여러 테이블에 대한 동적 모델 생성

공유 스키마와 동적 이름을 가진 수많은 임시 테이블을 보유하는 데이터베이스의 경우 Django를 통합하면 문제가 발생합니다. . 그러나 팩토리 함수를 사용하여 동적 데이터베이스 테이블이 있는 모델을 생성할 수 있습니다.

동적 데이터베이스 테이블 관리

팩토리 함수는 지정된 데이터베이스가 있는 모델을 반환합니다. 테이블. 이는 테이블 이름을 기반으로 한 동적 데이터 바인딩을 허용합니다:

def getModel(db_table):
  class MyClass(models.Model):
    # Model definition goes here...
    class Meta:
      db_table = db_table
  return MyClass

그런 다음 특정 테이블 이름으로 모델을 인스턴스화할 수 있습니다.

newClass = getModel('29345794_table')
newClass.objects.filter(...)

동적 클래스 명명을 위한 메타클래스

Django가 클래스의 _meta 속성을 캐시하므로 클래스 이름을 수정하려면 메타클래스가 필요합니다. 런타임 시:

def getModel(db_table):
  class MyClassMetaclass(models.base.ModelBase):
    def __new__(cls, name, bases, attrs):
      name  = db_table
      return models.base.ModelBase.__new__(cls, name, bases, attrs)

  class MyClass(models.Model):
    __metaclass__ = MyClassMetaclass
    class Meta:
      db_table = db_table
  return MyClass

추가 고려 사항

처음에는 변경할 수 없는 것으로 간주되었지만 데이터베이스 테이블은 다음과 같이 동적으로 설정할 수 있습니다.

MyModel._meta.db_table = '10293847_table'
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3