2017-02-25 89 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' 
         ) 

當我做產品的加入標籤。我得到錯誤:

class'sqlalchemy.exc.InvalidRequestError':找不到要從中加入的FROM子句。試圖加入,但得到:無法找到'product_tags'和'products'之間的任何外鍵關係。

這裏是我加入代碼:

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

我缺少的東西?

回答

3

首先,在您的產品表,第二個外鍵需要屬性引用表名「標籤」,所以變「tag.id」到「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') 
        ) 

,然後在產品型號,想要準確參考相應型號的名稱。改變 '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()