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