2016-10-03 29 views
0

需要模型,以便用戶可以有一個產品和用戶可以評論產品由其他用戶製作。我在考慮從產品到評論之間存在一對多的關係,但是那些用戶如何離開哪個評論。這是我迄今爲止。Sqlalchemy用戶產品評論關係模型deisgn

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(255), unique=True) 
    products = db.relationship('Product', backref='products', 
           lazy='dynamic') 


class Review(db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    stars = db.Column(db.String(255)) 
    description = db.Column(db.String(255)) 


class Product(db.Model): 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 
    id = db.Column(db.Integer(), primary_key=True) 
+0

如果您只是將外鍵約束添加到指向'Product.id'的'Review'類,該怎麼辦? – coralvanda

+0

但是,我怎麼知道哪個用戶離開了哪個評論? –

+0

您正在考慮添加的一對多關係應該適用於您,對嗎? – coralvanda

回答

1

你只需要爲UserProduct添加外鍵到您的Review表:

class Review(db.Model): 
    # ... 
    product_id = db.Column(db.Integer, db.ForeignKey('product.id')) 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 

你也可以再將Reviews的backrefs添加到您的UserProduct,並且您可以過濾user.reviewsproduct_id提供。

0

我想像這樣設置它(包括新的一對多 - 我認爲我已經得到了這個權利)。在您創建Python代碼中的條目時,您應該知道產品的ID,因此您可以簡單地添加它。我認爲您不一定需要爲此創建關係。

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(255), unique=True) 
    products = db.relationship('Product', backref='user', 
          lazy='dynamic') 
    reviews= db.relationship("Review", backref="user", lazy='dynamic') 


class Review(db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    product_id = db.Column(db.Integer, db.ForeignKey('product.id')) 
    stars = db.Column(db.String(255)) 
    description = db.Column(db.String(255)) 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 


class Product(db.Model): 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 
    id = db.Column(db.Integer(), primary_key=True) 

我更改了User類中的一行。你有

products = db.relationship('Product', backref='product', 
          lazy='dynamic') 

但我認爲這應該是

products = db.relationship('Product', backref='user', 
          lazy='dynamic') 
+0

是的,我可以添加它,但我仍然需要一個插槽來放入。不妨自動完成。我不需要它,但我應該儘可能地建造它「 –