我正试图从这些表中查询基于他们技能的用户。
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
username = db.Column(db.String(64), unique=True, index=True)
skills = db.relationship('Skill', backref='author', lazy='dynamic')
class Skill(db.Model):
__tablename__ = 'skills'
id = db.Column(db.Integer, primary_key=True)
skill = db.Column(db.String(64), index=True)
author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
我在用户表中尝试了这个,得到这个错误。
@classmethod
def users_by_skill(cls, skill):
return User.query.join(Skill).filter(skill.skill).all()
AttributeError: 'str' object has no attribute 'skill'
哪里我错过了?
定义以下类方法:
@classmethod
def users_by_skill(cls, skill):
return User.query.join(Skill).filter(skill.skill).all()
你可能希望像这样使用这个函数:
users = Users.users_by_skill('nunchuk')
表示users_by_skill
中的skill
参数是一个字符串。然后,你试着用skill.skill
,就像用'nunchuk'.skill
一样。Python在string类上没有skill
属性,因此出现错误。
filter
函数实际上接受一个Criteria
对象。换句话说,你传递给它的不是像"filter"
这样的值,而是一个代表"技能表中的技能列必须等于‘nunchuk’"概念的标准。您可以使用以下语法来完成此操作:
@classmethod
def users_by_skill(cls, skill_name):
return User.query.join(Skill).filter(Skill.skill == skill_name).all()