【问题标题】:Undefined attribute error for accessing relation访问关系的未定义属性错误
【发布时间】:2023-03-25 23:05:01
【问题描述】:

我定义了两个模型,它们之间的关系如下:

class Role(db.Model):

    __tablename__ = 'roles'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(40), nullable=False, unique=False)
    db.relationship('User', backref='role', lazy='dynamic')

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return f'<Role id={self.id} name={self.name}>'


class User(db.Model):

    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(40), unique=True)
    password = db.Column(db.String(40), unique=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

    def __init__(self, username, password, role_id):
        self.username = username
        self.password = password
        self.role_id = role_id

    def __repr__(self):
        return f'<User id={self.id} username={self.username} password={self.password}>'

然后在 shell 中我创建了如下条目:

> admin_role = Role('Admin')
> db.session.add(admin_role)
> db.session.commit()
> admin_user = User('adminusername', 'adminpassword',admin_role.id)
> db.session.add(admin_user)
> db.session.commit()

当我尝试查询模型时,我得到了完美的结果:

>>> admin_role = Role.query.first()
>>> admin_user = User.query.first()
>>> print(admin_role)
<Role id=1 name=Admin>
>>> print(admin_user)
<User id=1 username=adminusername password=adminpassword>

但是当我尝试访问关系时

print(admin_role.users)
print(admin_user.role)

我分别收到错误 Role object has no attribute usersUser object has no attribute role

【问题讨论】:

    标签: python sqlite flask flask-sqlalchemy relation


    【解决方案1】:

    错字?您必须将 db.relationship() 实例分配给变量。

    class Role(db.Model):
    
        __tablename__ = 'roles'
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(40), nullable=False, unique=False)
    -    db.relationship('User', backref='role', lazy='dynamic')
    +    users = db.relationship('User', backref='role', lazy='dynamic')
    

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 2010-12-16
      • 2021-08-17
      • 1970-01-01
      • 2019-02-11
      • 2015-01-13
      • 2016-05-08
      • 1970-01-01
      相关资源
      最近更新 更多