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

162 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 修复地区数据计划
## 目标
补全缺失的市级和区县级地区数据,使数据库与全国实际行政区划一致。
## 当前状态分析
### 问题
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` 列表末尾添加缺失的市级地区:
```python
# 在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 文件加载区县级数据:
```python
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 文件,便于维护和更新
- 省级、市级数据继续硬编码(数量少且稳定)