2016-10-03 10 views
0

ユーザーが製品を持ち、ユーザーが他のユーザーが行った製品に関するレビューを残すことができるようにするモデルが必要です。私は、製品からレビューまで1対多の関係を持つことを考えていたが、どのユーザーがどのレビューをどのように残したのか。これは私がこれまで持っていたものです。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

あなたが追加しようとしている1対多の関係は、それをカバーするべきでしょうか? – coralvanda

答えて

1

ことになっていると思う:

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

あなたがすることもでき、その後UserProductReviewsのバックグラウンドを追加し、をフィルタリングできますby product_id

0

私はこのようにそれを設定する想像しています(新しい1対多では、同様に含ま - 私は私が右のことを持っていると思います)。 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') 

を持っていたしかし、私はあなたがちょうどあなたのReviewテーブルにUserProductの外部キーを追加する必要があり、

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

うん、私はそれを追加することができますが、私はまだそれを入れてスロットが必要です。私は必要はありません "それを必要とするが、私はできるだけそれを構築する必要があります" –

関連する問題