from app import db # Trophy: Achievements granted to users for performing specific actions class Trophy(db.Model): __tablename__ = 'trophy' id = db.Column(db.Integer, primary_key=True) # Trophy type (polymorphic discriminator) type = db.Column(db.String(20)) __mapper_args__ = { 'polymorphic_identity': __tablename__, 'polymorphic_on': type } # Standalone properties name = db.Column(db.Unicode(64), index=True) owners = db.relationship('Member', secondary=lambda: TrophyMember, back_populates='trophies') def __init__(self, name): self.name = name # Title: Rare trophies that can be displayed along one's name class Title(Trophy): __tablename__ = 'title' __mapper_args__ = {'polymorphic_identity': __tablename__} id = db.Column(db.Integer, db.ForeignKey('trophy.id'), primary_key=True) css = db.Column(db.UnicodeText) def __init__(self, name, css): self.name = name self.css = css # Many-to-many relation for users earning trophies TrophyMember = db.Table('trophy_member', db.Model.metadata, db.Column('tid', db.Integer, db.ForeignKey('trophy.id')), db.Column('uid', db.Integer, db.ForeignKey('member.id')))