2016-10-03 3 views
0

사용자가 제품을 가질 수있는 모델이 필요하며 사용자는 다른 사용자가 만든 제품에 대한 리뷰를 남길 수 있습니다. 나는 제품과 리뷰에 일대 다 관계를 가지는 것을 생각하고 있었지만, 어떤 사용자가 어떤 리뷰를 남겼는가? 이것은 내가 지금까지 가지고있는 것이다.Sqlalchemy 사용자 제품 리뷰 관계 모델 설명

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

해야하는데 생각 :

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

나는이처럼 설정 상상 해요 (함께 새로운 일대뿐만 아니라 포함 - 내 생각 엔 내가있어 그 권리). 파이썬 코드에서 엔트리를 생성 할 때 제품 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

그래, 그걸 추가 할 수는있어.하지만 여전히 슬롯을 넣어야 해. 자동으로 해줬 으면 좋겠어. 나는 그것을 필요가 없다.하지만 내가 할 수있는 한 최선을 다해야한다. " –