您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

单个Django模型,多个表?

单个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()
Go 2022/1/1 18:23:14 有316人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶