我有一个简单的User
模型和一个Permissions
具有一对一关系的模型(只有几个布尔字段)。我希望能够批量更新我的权限。
输入数据如下:
[
{
"id": 22, # user_id
"permissions": {
"user_management": true,
"send_mail": true,
"vote": false
}
},
{
"id": 1,
"permissions": {
"vote": true
}
}
]
我想要一种使用 schema.load 并将 user_id 传递给孩子的方法,以便在调用后schema.load(data)
我可以调用db.session.commit()
并完成。
这就是我目前所做的:
def patch(self):
"""Update a batch of user permissions."""
post_data = request.json
schema = UserWithPermissionsSchema(only=['id', 'permissions'], load_instance=False, many=True)
errors = schema.validate(post_data)
if errors:
abort(400, errors)
_dict = {item['id']: item['permissions'] for item in post_data}
user_ids = [item['id'] for item in post_data]
perms = Permissions.query.filter(Permissions.user_id.in_(user_ids)).all()
for perm in perms:
perm.update(**_dict[perm.user_id])
db.session.commit()
return 'ok'
这不干净而且效率不高,因为我解析了几次相同的数据。
我尝试使用它,但它没有用。它在线生成错误db.session.commit()
:Marshmallow serialize nested with parent field