【问题标题】:Many to Many relationship calling on Flask SQL Alchemy调用 Flask SQLAlchemy 的多对多关系
【发布时间】:2018-09-07 23:55:42
【问题描述】:

我有如下徽章(成就)系统数据库结构:

class Base(db.Model):

__abstract__ = True

id = db.Column(db.Integer, primary_key=True)
date_created = db.Column(db.DateTime, default=db.func.current_timestamp())
date_modified = db.Column(db.DateTime, default=db.func.current_timestamp(),
                          onupdate=db.func.current_timestamp())

class User(UserMixin, Base):

__tablename__ = 'users'

username = db.Column(db.String(20), nullable=False, unique=True)
email = db.Column(db.String(50), nullable=False, unique=True)
password = db.Column(db.String(200), nullable=False)
name = db.Column(db.String(30), nullable=False)
badges = db.relationship('UserBadge', backref='ubadge',
                            lazy='dynamic')

class Badge(Base):

__tablename__ = 'badges'

name = db.Column(db.String(35), unique=True)
description = db.Column(db.String(300))
imgfile = db.Column(db.String(80))
badges = db.relationship('UserBadge', backref='badge',
                            lazy='dynamic')

def __repr__(self):
    return '<Achievement: {} - {}>'.format(self.name, self.description)

class UserBadge(Base):

__tablename__ = 'userbadges'

user_id = db.Column(db.Integer(), db.ForeignKey('users.id'))
badge_id = db.Column(db.Integer(), db.ForeignKey('badges.id'))

def __repr__(self):
    return '<Achievement: {} - {}>'.format(self.user_id, self.badge_id)

所以我可以返回特定用户的所有徽章,使用:

ubadges = UserBadge.query.filter_by(user_id=user.id).all()

返回:

 [<Achievement: 1 - 1>]

但我想显示 users.name 和 badges.name 而不是 1 (user_id) 和 1 (badge_id)。我如何访问这些属性?

【问题讨论】:

    标签: python sqlalchemy many-to-many relationship


    【解决方案1】:

    在您的 UserBadge 课程中,只需使用:

    def __repr__(self):
        return '<Achievement: {} - {}>'.format(self.ubadge.name, self.badge.name)
    

    它具有这两个属性,因为您在其他类中使用backref 设置它们。

    PS:您可能需要将User backref 更改为user,然后在上面的函数中使用self.user.name

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      相关资源
      最近更新 更多