【问题标题】:Sqlalchemy User Product Reviews Relation model deisgnSqlalchemy 用户产品评论关系模型设计
【发布时间】:2016-10-03 06:03:22
【问题描述】:

需要模型,以便用户可以拥有产品,并且用户可以对其他用户制作的产品发表评论。我在考虑从产品到评论之间存在一对多的关系,但随后哪些用户留下了哪些评论。这就是我到目前为止所拥有的。

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)

【问题讨论】:

  • 如果你只是给指向Product.idReview类添加一个外键约束呢?
  • 但是我怎么知道哪个用户留下了哪个评论?
  • 您正在考虑添加的一对多关系应该适合您,对吧?
  • 是的,我需要知道哪个用户对哪个产品留下了哪个评论。谢谢你的时间

标签: python sql flask sqlalchemy flask-sqlalchemy


【解决方案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 的反向引用添加到您的UserProduct,并且您可以通过product_id 过滤user.reviews

【讨论】:

    【解决方案2】:

    我想像这样设置它(也包括新的一对多 - 我想我做对了)。在 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')
    

    【讨论】:

    • 是的,我可以添加它,但我仍然需要一个插槽来放置它。还不如让它自动完成。我不“需要它,但我应该尽我所能”
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多