#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)