Files
vscode-workbench/.trae/documents/fix-region-data-plan.md
T

5.5 KiB
Raw Blame History

修复地区数据计划

目标

补全缺失的市级和区县级地区数据,使数据库与全国实际行政区划一致。

当前状态分析

问题

  1. 市级缺失 22 个:

    • 内蒙古缺 3 个盟(兴安盟、锡林郭勒盟、阿拉善盟)
    • 青海缺 6 个自治州(海北、黄南、海南、果洛、玉树、海西)
    • 四川缺 3 个自治州(阿坝、甘孜、凉山)
    • 贵州缺 3 个自治州(黔西南、黔东南、黔南)
    • 吉林缺 1 个(延边朝鲜族自治州)
    • 黑龙江缺 1 个(大兴安岭地区)
    • 湖北缺 1 个(恩施土家族苗族自治州)
    • 湖南缺 1 个(湘西土家族苗族自治州)
    • 海南缺 1 个(儋州市)
  2. 区县级完全缺失(约 2843 个)

实现方案

1. 补全市级数据(22个)

文件: c:\Users\12914\Desktop\vscode\chunyu_project\user\management\commands\seed_regions.py

在 CITIES 列表末尾添加缺失的市级地区:

# 在CITIES列表末尾追加

# 内蒙古(补3个盟)
("兴安盟", "152200", "xingan", "150000"),
("锡林郭勒盟", "152500", "xilinguole", "150000"),
("阿拉善盟", "152900", "alashan", "150000"),

# 青海(补6个自治州)
("海北藏族自治州", "632200", "haibei", "630000"),
("黄南藏族自治州", "632300", "huangnan", "630000"),
("海南藏族自治州", "632500", "hainan", "630000"),
("果洛藏族自治州", "632600", "guoluo", "630000"),
("玉树藏族自治州", "632700", "yushu", "630000"),
("海西蒙古族藏族自治州", "632800", "haixi", "630000"),

# 四川(补3个自治州)
("阿坝藏族羌族自治州", "513200", "aba", "510000"),
("甘孜藏族自治州", "513300", "ganzi", "510000"),
("凉山彝族自治州", "513400", "liangshan", "510000"),

# 贵州(补3个自治州)
("黔西南布依族苗族自治州", "522300", "qianxinan", "520000"),
("黔东南苗族侗族自治州", "522600", "qiandongnan", "520000"),
("黔南布依族苗族自治州", "522700", "qiannan", "520000"),

# 吉林(补1个)
("延边朝鲜族自治州", "222400", "yanbian", "220000"),

# 黑龙江(补1个)
("大兴安岭地区", "232700", "daxinganling", "230000"),

# 湖北(补1个)
("恩施土家族苗族自治州", "422800", "enshi", "420000"),

# 湖南(补1个)
("湘西土家族苗族自治州", "433100", "xiangxi", "430000"),

# 海南(补1个)
# 注:儋州市已存在,需要检查编码是否正确

2. 区县级数据(约2843个)

文件: c:\Users\12914\Desktop\vscode\chunyu_project\user\management\commands\data\districts.json

方案:

  • 创建独立的 JSON 文件存储区县级数据
  • 数据格式:[{"name": "东城区", "code": "110101", "parent_code": "110100", "pinyin": "dongcheng"}]
  • 文件预计约 300KB

文件: c:\Users\12914\Desktop\vscode\chunyu_project\user\management\commands\seed_regions.py

修改导入逻辑,使其支持从 JSON 文件加载区县级数据:

import json
import os

class Command(BaseCommand):
    help = '导入全国省市区地区数据'

    def handle(self, *args, **options):
        # ... 导入省级、市级 ...
        
        # 导入区县级
        self.import_districts()
    
    def import_districts(self):
        """从JSON文件导入区县级数据"""
        json_path = os.path.join(os.path.dirname(__file__), 'data', 'districts.json')
        if not os.path.exists(json_path):
            self.stdout.write(self.style.WARNING(f'区县级数据文件不存在: {json_path}'))
            return
        
        with open(json_path, 'r', encoding='utf-8') as f:
            districts = json.load(f)
        
        count = 0
        for item in districts:
            parent = Region.objects.filter(code=item['parent_code'], level=2).first()
            if not parent:
                continue
            _, created = Region.objects.get_or_create(
                code=item['code'],
                defaults={
                    'name': item['name'],
                    'level': 3,
                    'pinyin': item.get('pinyin', ''),
                    'parent': parent,
                    'sort_order': 0,
                }
            )
            if created:
                count += 1
        
        self.stdout.write(self.style.SUCCESS(f'成功导入 {count} 条区县级数据'))

3. 数据来源

区县级数据来源:

  • 国家统计局行政区划代码(2024年版)
  • 民政部全国行政区划信息查询平台
  • JSON 文件需手动生成或通过脚本获取

文件清单

文件 操作 说明
user/management/commands/seed_regions.py 修改 补全22个市级地区 + 添加区县级导入逻辑
user/management/commands/data/districts.json 新建 区县级数据文件(约2843条)

验证步骤

  1. 运行 python manage.py seed_regions
  2. 验证市级数量:Region.objects.filter(level=2).count() == 340
  3. 验证区县级数量:Region.objects.filter(level=3).count() >= 2800
  4. 验证API:GET /user/regions/?parent_code=130100 返回石家庄市下属区县
  5. 前端测试:个人中心地区选择器可正常显示三级级联

假设与决策

假设

  • JSON 文件可手动创建或通过外部脚本生成
  • 国家统计局数据为权威来源
  • 数据量约 300KB,加载时间可接受

决策

  • 使用 get_or_create 避免重复导入
  • 区县级数据独立为 JSON 文件,便于维护和更新
  • 省级、市级数据继续硬编码(数量少且稳定)