单个Django模型,多个表?

我在MySQL数据库中有几个临时表,它们共享相同的架构并具有动态名称。我将如何使用Django与这些表进行交互?一个模型可以从多个表中提取数据吗?

回答:

我相信,你可以创建一个工厂函数,该函数将通过动态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( ...

编辑:_meta每次调用此函数时,Django不会创建类属性的新实例。为_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()

以上是 单个Django模型,多个表? 的全部内容, 来源链接: utcz.com/qa/430042.html

回到顶部