在ORM模型中,我有三个具有一对多关系的类。如何在孙子类(“登录”)中使用hybrid_property获得祖父母(“角色”)的“名称”属性?
更新: 我在flask-admin视图的'column_list'中使用了新属性'user'。 我尝试使用db.session而不是Sessions,但失败了。我再次尝试了Session(),这次成功了!我本来应该做些傻事。
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(50))
users = db.relationship('User')
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer(), primary_key=True)
role_id = db.Column(db.Integer(), db.ForeignKey('roles.id'))
role = db.relationship("Role", back_populates="users")
logins = db.relationship('Login')
class Login(db.Model):
__tablename__ = 'logins'
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('users.id'))
user = db.relationship("User", back_populates="logins")
@hybrid_property
def user(self):
return self.user.role.name
@user.expression
def user(cls):
???query = Session().query(Role.name).join(Role.users).filter(User.id==cls.user_id).label('user')
return query
答案 0 :(得分:0)
我回答了我的问题,可能会对他人有所帮助。我发现了问题,并找到了一个简单的解决方法。 失败的原因是在登录表View的flask-admin的'column_searchable_list'中具有了hybrid_property'user'。我从列表中删除了它,原始代码起作用了。