我的应用程序有User
和Property
个模型。我最初使用的是Peewee ORM,但我正在转向SQLAlchemy。我想选择当前用户列出的所有属性并将其显示在模板中。在Peewee中,迭代以下查询工作,但我在SQLAlchemy中得到ProgrammingError
。如何在SQLAlchemy中获取与另一个实例相关的实例?
my_properties = Property.query.filter_by(listed_by=current_user)
{% for property in my_properties %}
{{ property.listing_no }}
class Property(db.Model):
id = db.Column(db.Integer, primary_key=True)
listed_by = db.Column(db.Integer, db.ForeignKey('users.id'))
答案 0 :(得分:1)
在Peewee中,外键字段不会将实际键与它所代表的键分开。在SQLAlchemy中,外键列只是键,关系用于表示它指向的事物。
listed_by
是一个整数。 current_user
是User
对象的代理。 SQLAlchemy不知道integer == User
的含义。
创建与User对象的关系并对其进行过滤。
class Property(db.Model):
id = db.Column(db.Integer, primary_key=True
listed_by_id = db.Column(db.ForeignKey(User.id))
listed_by = db.relationship(User, foreign_keys=[listed_by_id])
Property.query.filter_by(listed_by=current_user)
从技术上讲,你也可以通过传递用户的id来过滤id字段,尽管定义关系通常更有用。
Property.query.filter_by(listed_by_id=current_user.id)