# 无法通过API更新类别设置

**URL:** https://meta.discourse.org/t/unable-to-update-category-setting-thru-api/331737
**Category:** Support
**Created:** [2024 年10 月 20 日 05:47 UTC](https://meta.discourse.org/t/unable-to-update-category-setting-thru-api/331737 "2024-10-20T05:47:13Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Steve\_John](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve_john/32/435022_2.png) [@Steve\_John](https://meta.discourse.org/u/Steve_John)
#### Post date: [2024 年10 月 20 日 05:47 UTC](https://meta.discourse.org/t/unable-to-update-category-setting-thru-api/331737/1 "2024-10-20T05:47:13Z")

</div>

您好，我们一直在开发一个使用 CSV 输入创建类别的工具。在创建类别时，我们能够成功建立父子关系。但是，在应用类别设置时遇到了问题——它一直失败。如果您能就如何在创建新类别后应用类别设置（如下方列表所示）提供任何指导，我们将不胜感激。我们甚至尝试在应用设置前增加长达 40 秒的延迟，但仍然无效。

另外，我还想更新类别描述 :: `update_about_post(category_id, description)` # 仅更新描述。

另外，我想为类别添加两个额外的自定义字段，该如何添加？

# 更新类别设置的函数

def update\_category\_settings(category\_id):  
time.sleep(5) # 增加延迟以确保在应用设置前类别已完全创建

```
url = f"{DISCOURSE_URL}/categories/{category_id}"
data = {
    "subcategory_list_style": "boxes", # 将子类别样式设置为“框”
    "show_subcategory_list": True, # 在主题上方显示子类别列表
    "allow_solved_on_category": True # 启用已解决功能
}

response = requests.put(url, json={"category": data}, headers=headers)

if response.status_code == 200:
    print(f"已为类别 ID {category_id} 更新类别设置")
else:
    print(f"未能为类别 ID {category_id} 更新设置：{response.status_code}, {response.text}")

```

---

<div class="post-metadata">

### Author: ![Steve\_John](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve_john/32/435022_2.png) [@Steve\_John](https://meta.discourse.org/u/Steve_John)
#### Post date: [2024 年10 月 23 日 05:44 UTC](https://meta.discourse.org/t/unable-to-update-category-setting-thru-api/331737/2 "2024-10-23T05:44:27Z")

</div>

任何输入都将不胜感激，因为我卡在这里了……

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2024 年10 月 23 日 05:50 UTC](https://meta.discourse.org/t/unable-to-update-category-setting-thru-api/331737/3 "2024-10-23T05:50:01Z")

</div>

> [@Steve\_John](#):
>
> 任何输入都将不胜感激

我没有用 Python 测试过它，但值得尝试使用字符串 `\"true\"` 而不是布尔值 `True` 来代替布尔参数。Discourse 会将字符串 `\"true\"` 和 `\"false\"` 解释为布尔值。

我假设您能够使某些 API 调用正常工作，只是在此特定调用上遇到麻烦。如果不是这种情况，请告知我们。

---

<div class="post-metadata">

### Author: ![Steve\_John](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steve_john/32/435022_2.png) [@Steve\_John](https://meta.discourse.org/u/Steve_John)
#### Post date: [2024 年10 月 23 日 06:12 UTC](https://meta.discourse.org/t/unable-to-update-category-setting-thru-api/331737/4 "2024-10-23T06:12:46Z")

</div>

谢谢 Simon……你说得完全正确，我确实能让一些 API 调用工作起来……我能创建具有父子关系的类别……只是我无法添加描述详情和其他类别相关设置，无法让它们正常工作。

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2024 年10 月 23 日 07:00 UTC](https://meta.discourse.org/t/unable-to-update-category-setting-thru-api/331737/5 "2024-10-23T07:00:27Z")

</div>

我在本地论坛上尝试从命令行更新一些类别设置。这可以正常工作：

```plaintext
❯ curl -X PUT "http://localhost:4200/categories/10.json" \
      -H "Api-Key: $api_key" \
      -H "Api-Username: system" \
      -H "Content-Type: multipart/form-data;" \
      -F "show_subcategory_list=true" \
      -F "subcategory_list_style='boxes'" \
      -F "allow_badges=false"

```

如果无法正常工作，您可以尝试使用 `\"true\"` 而不是 `True`。

> [@Steve\_John](#):
>
> 我无法添加描述详细信息

我认为这是预期的。要添加描述，您需要编辑类别的“关于”主题。不幸的是，我认为“关于”主题的 URL 不会从对类别 URL 的请求中返回（例如 `http://localhost:4200/categories/10.json`）。不过，您可以从您网站的 `categories/json` URL 中获取它。包含“关于”主题 URL 的字段称为 `topic_url`。例如：`\"topic_url\":\"/t/about-the-general-category/3\"`。

所以，除非有我没看到更简单的方法，否则您需要向 `/categories.json` 发出请求，获取您感兴趣的类别的 `topic_url`，然后发出 API 请求来编辑该主题的第一个帖子。
