我在人际关系中遇到困难。我有用户和角色,并为他们定义了模型和模式。
问题是当我尝试添加具有先前定义的角色的新用户(我有它的 ID 和名称)时,它将尝试通过用户指定的值更新/插入角色表。但我只想从角色中选择并将其指定为用户角色而不更新角色表(如果找不到角色返回错误)。
我想要实现的是如何限制 SQLalchemy 通过用户指定的值更新相关表。
这是我的模型:
class User(db.Model):
"""user model
"""
__tablename__ = 'user'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
username = db.Column(db.String(40), unique=True, nullable=False)
password = db.Column(db.String(255), nullable=False)
role_id = db.Column(UUID(as_uuid=True), db.ForeignKey('role.id') , nullable=False)
class Role(db.Model):
"""role model
"""
__tablename__ = 'role'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
name = db.Column(db.String(40), unique=True, nullable=False)
perm_add = db.Column(db.Boolean, default=False)
perm_edit = db.Column(db.Boolean, default=False)
perm_del = db.Column(db.Boolean, default=False)
这是我定义的架构:
class UserSchema(ma.SQLAlchemyAutoSchema):
password = ma.String(load_only=True, required=True)
email = ma.String(required=True)
role = fields.Nested("RoleSchema", only=("id", "name"), required=True)
class Meta:
model = User
sqla_session = db.session
load_instance = True
我抓取由模式检查的用户输入并将其提交给数据库。
schema = UserSchema()
user = schema.load(request.json)
db.session.add(user)
try:
db.session.commit()
关键是在这里我无法更改有关角色名称或 ID 的任何内容,因为它似乎在应用于 DB 之前已被架构更改(我的意思是 request.json)