2017-02-25 2 views
0

に参加これは私のモデルである:私は製品とタグに加入ないときの製品とタグが多対多の関係SQLAlchemyのは

products_tags_table=db.Table('products_tags', 
         db.Column('product_id', db.Integer,db.ForeignKey('products.id'), nullable=False), 
         db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'),nullable=False), 
         db.PrimaryKeyConstraint('product_id', 'tag_id') 
         ) 

class Tag(db.Model): 
    __tablename__ = "tags" 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(256)) 
    description = db.Column(db.Text()) 
    background_img_url = db.Column(db.String(256)) 
    products =db.relationship('Product', 
           secondary=products_tags_table, 
           backref='product_tags' 
          ) 




class Product(db.Model): 
    __tablename__ = "products" 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(256)) 
    tags=db.relationship('ProductTag', 
         secondary=products_tags_table, 
         backref='tag_products' 
         ) 

を持っています。私はエラーが発生しました:

クラス 'sqlalchemy.exc.InvalidRequestError':参加するFROM句を見つけることができませんでした。結合しようとしましたが、取得しました: 'product_tags'と 'products'の間に外部キー関係が見つかりません。

avai_tags = Tag.query.join(Product).order_by(ProductTag.name) 

私は足りない何か:

ここに私のコードに参加していますか?

答えて

3

貴社の製品テーブルの最初の、2番目の外部キーのニーズプロパティ参照するテーブル名「タグ」は、「tags.id」

products_tags_table=db.Table('products_tags', 
        db.Column('product_id', db.Integer,db.ForeignKey('products.id'), nullable=False), 
        db.Column('tag_id',db.Integer,db.ForeignKey('tags.id'),nullable=False), 
                    #^Missing 's' 
        db.PrimaryKeyConstraint('product_id', 'tag_id') 
        ) 

そして、あなたの中に変化するので、「tag.id」適切なモデルの名前を正確に参照する必要があります。 'タグ' に変更] ProductTag "

tags=db.relationship('Tag', # 'ProductTag' <- This is a relationship to the Tag table. 
        secondary=products_tags_table, 
        backref='tag_products' 
        ) 

次に、あなたがこの

query = Tag.query.join(Product, Tag.products) 

avail_tags = query.order_by(Tag.name).all() 
のように参加してみてください