Sqlalchemy用户产品评论Relation model deisgn

时间:2016-10-03 06:03:23

标签: python sql flask sqlalchemy flask-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)

2 个答案:

答案 0 :(得分: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的backref添加到UserProduct,然后按user.reviews过滤product_id

答案 1 :(得分: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')