Flask-SQLAlchemy: Ролевые модели пользователей и взаимоотношения

#python #flask #sqlalchemy #flask-sqlalchemy

#питон #колба #sqlalchemy #колба-sqlalchemy

Вопрос:

Я пытаюсь создать модель базы данных Flask-SQLAlchemy, и мне нужно, чтобы пользователи были связаны с одной ролью. Пример ролей: «Пользователь», «Администратор», «Модератор».

Конечно, я мог бы использовать простой relatioship, который просто добавляет пользователю столбец 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)