如何使用Office365-REST-Python-Client更新SharePoint中的查找列?
我太懂你的困扰了——Shareplum把查找列的更新做了简化,直接传ID就能搞定,但Office365-REST-Python-Client是严格贴合SharePoint REST API规则设计的,得用特定格式指定查找项,不能直接传数字或文本。
下面给你一步步讲清楚解决方法:
1. 先搞懂查找列的正确赋值格式
SharePoint REST API要求更新查找列时,必须传递一个包含元数据类型和目标项ID的字典,而不是单纯的ID数值。基础格式是这样的:
lookup_value = { "__metadata": {"type": "SP.Data.目标列表实体类型名称"}, "Id": 你要关联的列表项ID }
2. 获取目标查找列表的实体类型名称
你得先拿到查找列指向的那个列表的实体类型名称,用库的API就能直接获取:
# 替换成你的目标查找列表的显示名称 target_lookup_list = ctx.web.lists.get_by_title("我的文档分类列表") ctx.load(target_lookup_list) ctx.execute_query() # 提取实体类型名称 lookup_entity_type = target_lookup_list.entity_type_name
3. 完整的更新代码示例
结合你现有的文件元数据更新逻辑,完整的查找列更新流程如下:
# 假设你已经有了ctx上下文对象,target_file是要操作的目标文件 list_item = target_file.listitem_allfields # 第一步:获取查找列对应的目标列表的实体类型 target_lookup_list = ctx.web.lists.get_by_title("我的文档分类列表") ctx.load(target_lookup_list) ctx.execute_query() lookup_entity_type = target_lookup_list.entity_type_name # 第二步:构造查找列的值 # 这里的"DocumentCategory"要替换成你的查找列的**内部名称**(不是界面显示名称!) lookup_value = { "__metadata": {"type": lookup_entity_type}, "Id": 1 # 替换成你要关联的列表项ID } list_item.set_property("DocumentCategory", lookup_value) # 第三步:执行更新 list_item.update() ctx.execute_query()
关键注意事项
- 必须用内部名称:查找列的参数名一定要用它的内部名称,不是界面上的显示名称。你可以在SharePoint列表设置的列详情里找到内部名称,或者用库加载列信息后提取
internal_name属性。 - 多值查找列的处理:如果你的查找列允许多值,把
lookup_value改成列表形式就行,比如:lookup_values = [ {"__metadata": {"type": lookup_entity_type}, "Id": 1}, {"__metadata": {"type": lookup_entity_type}, "Id": 3} ] list_item.set_property("MultiLookupColumn", lookup_values)
本质上就是Office365-REST-Python-Client没有像Shareplum那样帮你做自动封装,需要我们手动构造符合API要求的参数结构,按照这个方法来绝对能搞定查找列的更新问题~
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

