混合属性的混合(SQLAlchemy)

时间:2021-02-20 11:57:19

标签: python sqlalchemy mixins

我想创建一个可以与我的一些模型一起使用的 Mixin 类。问题是这个 Mixin 类包含混合属性,这阻止了我让它工作。 我有什么(非常简化):

class MyMixin:

my_column_1 = db.Column(db.Integer)

my_column_2 = db.Column(ARRAY(db.Integer))

@hybrid_property
def total_result_1(self):
    return self.my_column_2[0] + self.my_column_1

class MyModel1(db.Model, MyMixin):
   pass

class MyModel2(db.Model, MyMixin):
   pass

但我明白了:

AttributeError: Neither 'hybrid_property' object nor 'ExprComparator' object associated with MyModel1.total_result_1 has an attribute 'property'

我猜混合属性需要声明性基础才能工作,所以一个解决方案就是:

class MyBase(db.Model):
   pass

class MyModel1(MyBase):
   pass

class MyModel2(MyBase):
   pass

但是感觉语义不正确。我会说 Mixin 模式非常适合这个类的意义,因为我想做的是为某些模型添加一些额外的功能,而不是创建这些模型的基本功能。

我也玩过@declared_attr,但没有成功。

所以我的问题是,有没有办法让这个 Mixin 与 hybrid_properties 一起工作?我也愿意接受符合这一理念的任何其他模式。

提前致谢:)

0 个答案:

没有答案
相关问题