55import uuid_utils .compat
66from django .db import migrations , models
77
8+ old = [
9+ "https://apps-assets.fit2cloud.com/stable/maxkb/md2docx/logo.png" ,
10+ "https://apps-assets.fit2cloud.com/stable/maxkb/mcp_output/logo.png" ,
11+ "https://apps-assets.fit2cloud.com/stable/maxkb/feishubot/logo.png" ,
12+ "https://apps-assets.fit2cloud.com/stable/maxkb/mongo/logo.png" ,
13+ "https://apps-assets.fit2cloud.com/stable/maxkb/OFD_Parse/logo.png" ,
14+ "https://apps-assets.fit2cloud.com/stable/maxkb/html_to_pdf/logo.png" ,
15+ "https://apps-assets.fit2cloud.com/stable/maxkb/feishu_datasource/logo.png" ,
16+ "https://apps-assets.fit2cloud.com/stable/maxkb/quotation_generation_agent/logo.png" ,
17+ "https://apps-assets.fit2cloud.com/stable/maxkb/html2pdf/logo.png" ,
18+ "https://apps-assets.fit2cloud.com/stable/maxkb/sqlbot_ai/logo.png" ,
19+ "https://apps-assets.fit2cloud.com/stable/maxkb/metaso/logo.png" ,
20+ "https://apps-assets.fit2cloud.com/stable/maxkb/registry/logo.png" ,
21+ "https://apps-assets.fit2cloud.com/stable/maxkb/smtp_email/logo.png" ,
22+ "https://apps-assets.fit2cloud.com/stable/maxkb/wecomrobot/logo.png" ,
23+ "https://apps-assets.fit2cloud.com/stable/maxkb/paperx/logo.png" ,
24+ "https://apps-assets.fit2cloud.com/stable/maxkb/case_inquire/logo.png" ,
25+ "https://apps-assets.fit2cloud.com/stable/maxkb/data_analysis_assistant/logo.png" ,
26+ "https://apps-assets.fit2cloud.com/stable/maxkb/crm_intelligent_search/logo.png" ,
27+ "https://apps-assets.fit2cloud.com/stable/maxkb/case_collection/logo.png" ,
28+ "https://apps-assets.fit2cloud.com/stable/maxkb/knowledge_self_assessment/logo.png" ,
29+ "https://apps-assets.fit2cloud.com/stable/maxkb/minerU_util/logo.png" ,
30+ "https://apps-assets.fit2cloud.com/stable/maxkb/invoice_recognition/logo.png" ,
31+ "https://apps-assets.fit2cloud.com/stable/maxkb/fragment/logo.png" ,
32+ "https://apps-assets.fit2cloud.com/stable/maxkb/contract_review/logo.png" ,
33+ "https://apps-assets.fit2cloud.com/stable/maxkb/echart_to_svg/logo.png" ,
34+ "https://apps-assets.fit2cloud.com/stable/maxkb/extract/logo.png" ,
35+ "https://apps-assets.fit2cloud.com/stable/maxkb/big_order/logo.png" ,
36+ "https://apps-assets.fit2cloud.com/stable/maxkb/crm_intelligent_recording/logo.png" ,
37+ "https://apps-assets.fit2cloud.com/stable/maxkb/dingrobot/logo.png" ,
38+ "https://apps-assets.fit2cloud.com/stable/maxkb/timestamp/logo.png" ,
39+ "https://apps-assets.fit2cloud.com/stable/maxkb/knowledge_workflow/logo.png" ,
40+ "https://apps-assets.fit2cloud.com/stable/maxkb/household_registration_policy_qa_assistant/logo.png" ,
41+ "https://apps-assets.fit2cloud.com/stable/maxkb/httputils/logo.png" ,
42+ "https://apps-assets.fit2cloud.com/stable/maxkb/html_compression/logo.png" ,
43+ "https://apps-assets.fit2cloud.com/stable/maxkb/crm_customer_entry_ai_agent/logo.png" ,
44+ "https://apps-assets.fit2cloud.com/stable/maxkb/anspire/logo.png" ,
45+ "https://apps-assets.fit2cloud.com/stable/maxkb/application_template/logo.png" ,
46+ "https://apps-assets.fit2cloud.com/stable/maxkb/baidu-translate/logo.png" ,
47+ "https://apps-assets.fit2cloud.com/stable/maxkb/website_translation/logo.png" ,
48+ ]
49+ new = [
50+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_md2docx/logo.png" ,
51+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_mcp_output/logo.png" ,
52+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_feishubot/logo.png" ,
53+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_mongo/logo.png" ,
54+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_OFD_Parse/logo.png" ,
55+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_html_to_pdf/logo.png" ,
56+ "https://apps-assets.fit2cloud.com/stable/maxkb/db_feishu_datasource/logo.png" ,
57+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_quotation_generation_agent/logo.png" ,
58+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_html2pdf/logo.png" ,
59+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_sqlbot_ai/logo.png" ,
60+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_metaso/logo.png" ,
61+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_registry/logo.png" ,
62+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_smtp_email/logo.png" ,
63+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_wecomrobot/logo.png" ,
64+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_paperx/logo.png" ,
65+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_case_inquire/logo.png" ,
66+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_data_analysis_assistant/logo.png" ,
67+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_crm_intelligent_search/logo.png" ,
68+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_case_collection/logo.png" ,
69+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_knowledge_self_assessment/logo.png" ,
70+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_minerU_util/logo.png" ,
71+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_invoice_recognition/logo.png" ,
72+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_fragment/logo.png" ,
73+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_contract_review/logo.png" ,
74+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_echart_to_svg/logo.png" ,
75+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_extract/logo.png" ,
76+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_big_order/logo.png" ,
77+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_crm_intelligent_recording/logo.png" ,
78+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_dingrobot/logo.png" ,
79+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_timestamp/logo.png" ,
80+ "https://apps-assets.fit2cloud.com/stable/maxkb/kbwf_knowledge_workflow/logo.png" ,
81+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_household_registration_policy_qa_assistant/logo.png" ,
82+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_httputils/logo.png" ,
83+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_html_compression/logo.png" ,
84+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_crm_customer_entry_ai_agent/logo.png" ,
85+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_anspire/logo.png" ,
86+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_application_template/logo.png" ,
87+ "https://apps-assets.fit2cloud.com/stable/maxkb/tool_baidu-translate/logo.png" ,
88+ "https://apps-assets.fit2cloud.com/stable/maxkb/app_website_translation/logo.png" ,
89+ ]
90+
91+ def _replace_tool_icons (apps , schema_editor ):
92+ if len (old ) != len (new ):
93+ raise ValueError ("`old` 与 `new` 长度不一致,无法一一替换" )
94+
95+ Tool = apps .get_model ("tools" , "Tool" )
96+ mapping = dict (zip (old , new ))
97+
98+ # 逐个 update,避免依赖数据库对 CASE/WHEN 的兼容差异
99+ for old_icon , new_icon in mapping .items ():
100+ Tool .objects .filter (icon = old_icon ).update (icon = new_icon )
8101
9102class Migration (migrations .Migration ):
10103
@@ -31,4 +124,5 @@ class Migration(migrations.Migration):
31124 'db_table' : 'tool_record' ,
32125 },
33126 ),
127+ migrations .RunPython (_replace_tool_icons , reverse_code = migrations .RunPython .noop ),
34128 ]
0 commit comments