我在 MySQL 数据库中有几个临时表,它们共享相同的架构并具有动态名称。我将如何使用 Django 与这些表交互?单个模型可以从多个表中提取数据吗?
我相信,您可以创建一个工厂函数,该函数会以动态方式返回您的模型db_table http://docs.djangoproject.com/en/dev/ref/models/options/#db-table.
def getModel(db_table):
class MyClass(models.Model):
# define as usual ...
class Meta:
db_table = db_table
return MyClass
newClass = getModel('29345794_table')
newClass.objects.filter( ...
编辑:Django 不会创建该类的新实例_meta
每次调用此函数时的属性。创建一个新实例_meta
它取决于类的名称(Django 必须将其缓存在某个地方)。元类可用于在运行时更改类的名称:
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'
>>> MyModel.objects.all()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)