在模型的外部 class 方法中访问 peewee 的 Meta subclass
Access peewee's Meta subclass in Model's outer class method
我正在尝试将 peewee 模型和 classes 包装到其他界面中,我想将模型动态分配给数据库。我为此使用 peewee.Proxy class,但我不想使用全局变量来初始化此代理。我想制作 class 方法来更改基本模型的元(内部)class,但出现以下错误:
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 来访问这个变量,但在我看来它不太直观。
你有什么建议吗?
我不知道你为什么会遇到这个问题,我很想知道完整的答案。
问题出在名称 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)
Peewee 在构建 class 之后将内部 "Meta" class 转换为可在 "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)
我正在尝试将 peewee 模型和 classes 包装到其他界面中,我想将模型动态分配给数据库。我为此使用 peewee.Proxy class,但我不想使用全局变量来初始化此代理。我想制作 class 方法来更改基本模型的元(内部)class,但出现以下错误:
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 来访问这个变量,但在我看来它不太直观。
你有什么建议吗?
我不知道你为什么会遇到这个问题,我很想知道完整的答案。
问题出在名称 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)
Peewee 在构建 class 之后将内部 "Meta" class 转换为可在 "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)