2016-03-05 54 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)