2016-08-16 8 views
0

私のアプリケーションにはUserPropertyモデルがあります。私はもともとPeewee ORMを使用していましたが、SQLAlchemyに切り替えています。私は、現在のユーザによってリストされたすべてのプロパティを選択し、それらをテンプレートに表示したい。 Peeweeでは、次のクエリを繰り返し処理しましたが、SQLAlchemyにはProgrammingErrorがあります。 SQLAlchemy内の別のインスタンスに関連するインスタンスを取得するにはどうすればよいですか?ピーウィー、外部キーフィールドに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

url_forありがとう、私はそれを変更します。質問が編集されました。さらにコードが追加されました – carambo

+0

申し訳ありません、db.Model、コードが追加されました – carambo

+0

current_user is flask_login。はい、私はForeignKeyを作成する方法を学ぶときにどこかに関係のものを見ました、それはそれなしで働いたので、私はそれを許可しましたが、私はそれを追加する必要があります。 – carambo

答えて

1

それが表す事から実際のキーを分離しません。 SQLAlchemyでは、外部キー列はキーだけであり、関係が指しているものを表すために使用されます。

listed_byは整数です。 current_userUserオブジェクトへのプロキシです。 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) 
+0

'Property.query.filter_by(listing_by = current_user)'とうまく動作します 'ありがとう、たくさんの人 – carambo

関連する問題