Django에서 다중 테이블에 대한 동적 모델 생성
공유 스키마와 동적 이름을 가진 수많은 임시 테이블을 보유하는 데이터베이스의 경우 Django를 통합하면 문제가 발생합니다. . 그러나 팩토리 함수를 사용하여 동적 데이터베이스 테이블이 있는 모델을 생성할 수 있습니다.
동적 데이터베이스 테이블 관리
팩토리 함수는 지정된 데이터베이스가 있는 모델을 반환합니다. 테이블. 이를 통해 테이블 이름을 기반으로 한 동적 데이터 바인딩이 가능합니다.
<code class="python">def getModel(db_table): class MyClass(models.Model): # Model definition goes here... class Meta: db_table = db_table return MyClass</code>
그런 다음 특정 테이블 이름으로 모델을 인스턴스화할 수 있습니다.
<code class="python">newClass = getModel('29345794_table') newClass.objects.filter(...)</code>
동적 클래스 명명을 위한 메타클래스
Django는 클래스의 _meta 속성을 캐시하므로 런타임 시 클래스 이름을 수정하려면 메타클래스가 필요합니다.
<code class="python">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</code>
추가 고려 사항
처음에는 변경할 수 없는 것으로 생각되었지만 데이터베이스 테이블을 동적으로 설정할 수 있습니다.
<code class="python">MyModel._meta.db_table = '10293847_table'</code>
위 내용은 공유 스키마와 동적 이름을 사용하여 여러 테이블에 대해 Django 모델을 어떻게 동적으로 생성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!