1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # 城市联动
- """
- 到乡级 使用方法
- 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("省份数据初始化数据完成!")
|