Flask-SQLAlchemy:用户角色模型和关系

Posted

技术标签:

【中文标题】Flask-SQLAlchemy:用户角色模型和关系【英文标题】:Flask-SQLAlchemy: User role Models and relationship 【发布时间】:2022-01-12 10:32:18 【问题描述】:

我正在尝试创建 Flask-SqlAlchemy 数据库模型,并且需要将用户链接到单个角色。示例角色:“用户”、“管理员”、“版主”。

当然我可以使用一个简单的关系,它只是向用户添加一个 user_role_id 列,但我也想跟踪最后一次修改。

class User:
    id = db.Column(db.Integer, primary_key=True)

class UserRole:
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False)

class UserRoleLink(db.Model):
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), primary_key=True)
    user_role_id = db.Column(db.Integer, db.ForeignKey("user_role.id"), primary_key=True)
    last_modified = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)

如何使用所需的关系完成此模型?另外我想确保一个用户只能拥有一个角色,但角色可以根据需要经常使用。

提前谢谢你!

【问题讨论】:

【参考方案1】:

我认为它应该适合你:

class User:
    id = db.Column(db.Integer, primary_key=True)

class UserRole:
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False, unique=True)
    role_link = db.relationship('UserRoleLink', cascade='all, delete-orphan', uselist=False)

class UserRoleLink(db.Model):
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), primary_key=True)
    user_role_id = db.Column(db.Integer, db.ForeignKey("user_role.id"), primary_key=True)
    last_modified = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)

【讨论】:

以上是关于Flask-SQLAlchemy:用户角色模型和关系的主要内容,如果未能解决你的问题,请参考以下文章

如何自动填充 SQLAlchemy 数据库字段? (Flask-SQLAlchemy)

Flask-SqlAlchemy、Bcrypt、Postgres 的编码问题

Flask 学习-13.Flask-SQLAlchemy 新建模型和字段

如何使用 Flask-SQLAlchemy 使用 csv 填充具有外键的模型?

从 flask-sqlalchemy db 获取所有模型

当 2 个模型在 flask-sqlalchemy 中继承相同的对象时收到警告