84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
# 城市联动
|
||
"""
|
||
到乡级 使用方法
|
||
1. https://www.npmjs.com/package/china-division 下载数据,把对应的json放入对应目录
|
||
2. 修改此文件中对应json名
|
||
3. 右击执行此py文件进行初始化
|
||
"""
|
||
import json
|
||
import os
|
||
|
||
import django
|
||
import pypinyin
|
||
from django.core.management import BaseCommand
|
||
from django.db import connection
|
||
|
||
from application import dispatch
|
||
|
||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
|
||
django.setup()
|
||
from application.settings import BASE_DIR
|
||
from dvadmin.system.models import Area
|
||
|
||
area_code_list = []
|
||
|
||
|
||
def area_list(code_list, pcode=None, depth=1):
|
||
"""
|
||
递归获取所有列表
|
||
"""
|
||
for code_dict in code_list:
|
||
code = code_dict.get('code', None)
|
||
name = code_dict.get('name', None)
|
||
children = code_dict.get('children', None)
|
||
pinyin = ''.join([''.join(i) for i in pypinyin.pinyin(name, style=pypinyin.NORMAL)])
|
||
area_code_list.append(
|
||
{
|
||
"name": name,
|
||
"code": code,
|
||
"level": depth,
|
||
"pinyin": pinyin,
|
||
"initials": pinyin[0].upper() if pinyin else "#",
|
||
"pcode_id": pcode,
|
||
}
|
||
)
|
||
if children:
|
||
area_list(code_list=children, pcode=code, depth=depth + 1)
|
||
|
||
|
||
def main():
|
||
with open(os.path.join(BASE_DIR, 'dvadmin', 'system', 'util', 'pca-code.json'), 'r', encoding="utf-8") as load_f:
|
||
code_list = json.load(load_f)
|
||
area_list(code_list)
|
||
if Area.objects.count() == 0:
|
||
Area.objects.bulk_create([Area(**ele) for ele in area_code_list])
|
||
else:
|
||
for ele in area_code_list:
|
||
code = ele.pop("code")
|
||
Area.objects.update_or_create(code=code, defaults=ele)
|
||
|
||
|
||
class Command(BaseCommand):
|
||
"""
|
||
项目初始化命令: python manage.py init
|
||
"""
|
||
|
||
def add_arguments(self, parser):
|
||
pass
|
||
|
||
def handle(self, *args, **options):
|
||
|
||
print(f"正在准备初始化省份数据...")
|
||
|
||
if dispatch.is_tenants_mode():
|
||
from django_tenants.utils import get_tenant_model
|
||
from django_tenants.utils import tenant_context
|
||
for tenant in get_tenant_model().objects.exclude(schema_name='public'):
|
||
with tenant_context(tenant):
|
||
print(f"租户[{connection.tenant.schema_name}]初始化数据开始...")
|
||
main()
|
||
print(f"租户[{connection.tenant.schema_name}]初始化数据完成!")
|
||
else:
|
||
main()
|
||
print("省份数据初始化数据完成!")
|