我正在尝试将peewee模型和类包装到其他接口中,并且我想将模型动态分配给数据库。我为此使用peewee.Proxy类,但我不想使用全局变量来使该代理的初始化可用。我想制作用于更改基本模型的Meta(内部)类的类方法,但出现以下错误:
AttributeError: type object 'BaseModel' has no attribute 'Meta'
我拥有的代码:
import peewee as pw
class BaseModel(pw.Model):
class Meta:
database = pw.Proxy()
@classmethod
def configure_proxy(cls, database: pw.Database):
cls.Meta.database.initialize(database)
我当然可以通过调用BaseModel.Meta.database来访问此变量,但我认为它不太直观。
您有任何建议吗?
答案 0 :(得分:0)
我不知道您为什么会遇到这个问题,我对完整答案很感兴趣。
问题出在名字Meta
上。我猜测pw.Model
中定义了这个名称,但是我还没有经历全部。
也就是说,这(例如)有效:
import peewee as pw
class BaseModel(pw.Model):
class MyMeta:
database = pw.Proxy()
@classmethod
def configure_proxy(cls, database: pw.Database):
cls.MyMeta.database.initialize(database)
答案 1 :(得分:0)
在构建类之后,Peewee将内部的“ Meta”类转换为可在“ ModelClass._meta”处访问的对象:
将“ .Meta”更改为“ ._meta”:
class BaseModel(pw.Model):
class Meta:
database = pw.Proxy()
@classmethod
def configure_proxy(cls, database: pw.Database):
cls._meta.database.initialize(database)