2016-03-05 56 views
0

我创建一个购物车,为了这个,我现在用的是以下车型在瓶关联表:SQLAlchemy的瓶 - 与两个以上的列

line_item = db.Table('line_item', 
        db.Column('cart_id', db.Integer, db.ForeignKey('cart.id')), 
        db.Column('product_id', db.Integer, db.ForeignKey('product.id')), 
        db.Column('price', db.Float) 
        ) 


class Cart(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 


class Product(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.Unicode(64), index=True, unique=True) 
    description = db.Column(db.Unicode(500), index=True, unique=True) 
    image_url = db.Column(db.Unicode(128)) 
    price = db.Column(db.Float) 
    line_item = db.relationship('Cart', secondary=line_item, backref=db.backref('products', lazy='dynamic')) 

我想在关联表使用一个额外的列“ line_item“包含价格,以便在用户将其添加到购物车时节省产品的价格。

我知道没有price列我会做以下操作来添加这些数据。

p = Product() 
c = Cart() 
p.line_item.append(c) 
db.session.add(p) 
db.session.commit() 

我该如何在关联表中插入price

+0

为什么用户增加了车和结算之间的价格变化?此外,如果价格确实发生变化,您是否希望在结账时收取适当的价格并显示正确的价格? –

回答

0

使用db.ModelLineItem - 未经测试的代码如下:

class LineItem(db.Model): 
    __tablename__ = 'line_items'   
    cart_id = db.Column(db.Integer, db.ForeignKey('carts.id'), primary_key=True) 
    product_id = db.Column(db.Integer, db.ForeignKey('products.id'), primary_key=True) 
    price = db.Column(db.Float)  
    cart = db.relationship("Cart", back_populates="line_items") 
    product = db.relationship("Product", back_populates="carts") 


class Cart(db.Model): 
    __tablename__ = 'carts' 
    id = db.Column(db.Integer, primary_key=True) 
    line_items = db.relationship(LineItem, back_populates="cart")  


class Product(db.Model): 
    __tablename__ = 'products' 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.Unicode(64), index=True, unique=True) 
    description = db.Column(db.Unicode(500), index=True, unique=True) 
    image_url = db.Column(db.Unicode(128)) 
    price = db.Column(db.Float) 
    carts = db.relationship(LineItem, back_populates="product")  


p = Product() 
c = Cart() 

line_item = LineItem() 
line_item.price = p.price 
line_item.product = p 

c.line_items.append(line_item)