How to inherit a custom constructor for all Flask-SQLAlchemy models(如何继承所有Flask-SQLAlChemy模型的自定义构造函数)
问题描述
我的代码:
当我尝试创建UploadFile的实例时,它可以工作,但它不调用NewModel
的构造函数。为什么?
我找到this issue,但没有解决我的问题。
我试图使用orm.restructor装饰器,但也不起作用。
推荐答案
问题中的方法不起作用,因为SQLAlChemy将自己的__init__
方法修补到模型超类上。default implementation根据关键字参数分配实例属性值,这就是代码在未调用已定义的__init__
方法的情况下仍然起作用的原因。
这可以通过declarative_base函数配置,但遗憾的是,Flask-SQLAlChemy不会直接公开这一点。
可以通过创建abstract模型类并从其继承应用程序的模型来获得所需的结果。
要在模型超类(NewModel
)上获得有效的__init__
实现,我们需要创建一个自定义构造函数并使用它、Flask的DefaultMeta
元类和NewModel
类来创建可以传递给SQLAlchemy
构造函数的新声明性基类。
这篇关于如何继承所有Flask-SQLAlChemy模型的自定义构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!