0

我有一个简单的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

4

0 回答 0