使用ASANA Python API更新自定义字段 [英] Updating a custom field using ASANA Python API

查看:101
本文介绍了使用ASANA Python API更新自定义字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试更新Asana列表中的自定义字段的值.我正在使用 Asana API v1的官方Python客户端库.

I'm trying to update the values of custom fields in my Asana list. I'm using the Official Python client library for the Asana API v1.

我的代码当前看起来像这样;

My code currently looks like this;

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将返回任务的所有详细信息,但是自定义字段尚未更新.

But when I run the code, the task doesn't update. The return of print client.tasks.update returns all the details of the task, but the custom field has not been updated.

推荐答案

我认为问题在于我们的API与自定义字段不对称...我觉得这实在太可惜了.在这种情况下,这可能是一个真正的陷阱.不能像上面那样在值块内设置自定义字段的值(这很直观),您必须使用键:类似于值字典的设置custom_field_id:new_value来设置它们-不那么直观, 很遗憾.所以上面,你在哪里

I think the problem is that our API is not symmetrical with respect to custom fields... which I kind of find to be a bummer; it can be a real gotcha in cases like this. Rather than being able to set the value of a custom field within the block of values as you're doing above, which is intuitive, you have to set them with a key:value dictionary-like setup of custom_field_id:new_value - not as intuitive, unfortunately. So above, where you have

for custom_field in task['custom_fields']:
  custom_field['text_value'] = "New Data!"

我认为您必须执行以下操作:

I think you'd have to do something like this:

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

The goal is to generate JSON for the POST request that looks something like

{
  "data": {
    "custom_fields":{
      "12345678":"New Data!"
    }
  }
}

作为进一步的说明,如果您有文本自定义字段,则值应该是新的文本字符串,如果是数字自定义字段,则值应该是数字,以及enum_options选择的ID(请看第三个示例)如果它是枚举自定义字段,则在此标头下)

As a further note, the value should be the new text string if you have a text custom field, a number if it's a number custom field, and the ID of the enum_options choice (take a look at the third example under this header on our documentation site) if it's an enum custom field.

这篇关于使用ASANA Python API更新自定义字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆