whoami9894
V2EX  ›  问与答

SQLAlchemy 有办法创建一个通用字段的父类吗

By whoami9894 at 2019 年 3 月 31 日 · 1342 次点击

需要创建几张表,每张表有大量通用字段,想通过继承来复用这些字段

创建了一个 metaclass 来增加类属性,但是报 metaclass conflict 了

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

按报错需要子类的元类继承自所有父类的元类,尝试去继承 db.Model 的元类好像有点问题

代码如下

class MetaRank(type):
    def __new__(cls, name, bases, attrs):
        attrs.update({
            'id': db.Column(db.Integer),
            'rank1': db.Column(db.Integer),
            'rank2': db.Column(db.Integer),
            'rank3': db.Column(db.Integer),
            'rank4': db.Column(db.Integer),
            'rank5': db.Column(db.Integer),
            'rank6': db.Column(db.Integer),
        })
        return type.__new__(cls, name, bases, attrs)


class BaseRank(object, metaclass=MetaRank):
    pass
    
    
class MovieRank(db.Model, BaseRank):
    work_id = db.ForeignKey('movie.id')


class PhotoRank(db.Model, BaseRank):
    work_id = db.ForeignKey('photo.id')

不知道我表述清楚了没,大概意思和这篇文章一样 https://www.dreamincode.net/forums/topic/324123-metaclass-for-a-class-extending-from-sqlalchemy-declarative-base/

目前尚无回复
© 2026 V2EX · 24ms · 3.9.8.5