我相信,你可以创建一个工厂函数,该函数将通过动态db_table返回你的模型。
def getModel(db_table): class MyClass(models.Model): # define as usual ... class meta: db_table = db_table return MyClassnewClass = 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()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)