我正在尝试更新体式列表中自定义字段的值。我正在使用Asana API v1 的官方 Python 客户端库 https://github.com/Asana/python-asana.
我的代码目前看起来像这样;
project = "Example Project"
keyword = "Example Task"
print "Logging into ASANA"
api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
client = asana.Client.basic_auth(api_key)
me = client.users.me()
all_projects = next(workspace for workspace in me['workspaces'])
projects = client.projects.find_by_workspace(all_projects['id'])
for project in projects:
if 'Example Project' not in project['name']:
continue
print "Project found."
print "\t"+project['name']
print
tasks = client.tasks.find_by_project(project['id'], {"opt_fields":"this.name,custom_fields"}, iterator_type=None)
for task in tasks:
if keyword in task['name']:
print "Task found:"
print "\t"+str(task)
print
for custom_field in task['custom_fields']:
custom_field['text_value'] = "New Data!"
print client.tasks.update(task['id'], {'data':task})
但是当我运行代码时,任务不会更新。 print client.tasks.update的返回返回了任务的所有详细信息,但自定义字段尚未更新。
我认为问题在于我们的 API 相对于自定义字段并不对称……我觉得这有点令人失望;在这种情况下,这可能是一个真正的问题。您必须使用类似于 key:value 字典的设置来设置它们,而不是像上面那样直观地在值块中设置自定义字段的值custom_field_id:new_value
- 不幸的是,不那么直观。所以上面,你有
for custom_field in task['custom_fields']:
custom_field['text_value'] = "New Data!"
我认为你必须做这样的事情:
new_custom_fields = {}
for custom_field in task['custom_fields']:
new_custom_fields[custom_field['id']] = "New Data!"
task['custom_fields'] = new_custom_fields
目标是为 POST 请求生成 JSON,如下所示
{
"data": {
"custom_fields":{
"12345678":"New Data!"
}
}
}
进一步说明,如果您有文本自定义字段,则该值应该是新的文本字符串;如果是数字自定义字段,则该值应该是数字;如果是数字自定义字段,则该值应该是新的文本字符串;如果是数字自定义字段,则该值应该是新的文本字符串。enum_options
选择(看看下面的第三个例子这个标题 https://asana.com/developers/api-reference/custom_fields#type-specific在我们的文档网站上)如果它是枚举自定义字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)