feat: add CityArea
This commit is contained in:
BIN
backend/data/省市区.xlsx
Normal file
BIN
backend/data/省市区.xlsx
Normal file
Binary file not shown.
35
backend/system/management/commands/import_city_area_data.py
Normal file
35
backend/system/management/commands/import_city_area_data.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from system.models import CityArea
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = '导入省市区数据'
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
file_path = 'data/省市区.xlsx' # 文件路径,根据实际情况调整
|
||||||
|
try:
|
||||||
|
# 读取 Excel 文件
|
||||||
|
excel_file = pd.ExcelFile(file_path)
|
||||||
|
df = excel_file.parse() # 假设只有一个工作表,如果有多个,需要调整
|
||||||
|
|
||||||
|
# 使用 bulk_create 进行批量导入
|
||||||
|
bulk_objects = []
|
||||||
|
for index, row in df.iterrows():
|
||||||
|
bulk_objects.append(CityArea(
|
||||||
|
prov_id=row['省份ID'],
|
||||||
|
prov_name=row['省份名称'],
|
||||||
|
city_id=row['城市ID'],
|
||||||
|
city_name=row['城市名称'],
|
||||||
|
area_id=row['地区ID'],
|
||||||
|
area_name=row['地区名称']
|
||||||
|
))
|
||||||
|
|
||||||
|
# 批量创建对象
|
||||||
|
CityArea.objects.bulk_create(bulk_objects, batch_size=1000)
|
||||||
|
|
||||||
|
self.stdout.write(self.style.SUCCESS('数据导入成功'))
|
||||||
|
except FileNotFoundError:
|
||||||
|
self.stdout.write(self.style.ERROR(f'文件 {file_path} 未找到'))
|
||||||
|
except KeyError as e:
|
||||||
|
self.stdout.write(self.style.ERROR(f'列 {e} 未找到'))
|
||||||
99
backend/system/migrations/0005_cityarea.py
Normal file
99
backend/system/migrations/0005_cityarea.py
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
# Generated by Django 5.2.1 on 2025-10-13 12:34
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("system", "0004_config"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="CityArea",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"remark",
|
||||||
|
models.CharField(
|
||||||
|
blank=True,
|
||||||
|
db_comment="备注",
|
||||||
|
help_text="备注",
|
||||||
|
max_length=256,
|
||||||
|
null=True,
|
||||||
|
verbose_name="备注",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"creator",
|
||||||
|
models.CharField(
|
||||||
|
blank=True,
|
||||||
|
db_comment="创建人",
|
||||||
|
help_text="创建人",
|
||||||
|
max_length=64,
|
||||||
|
null=True,
|
||||||
|
verbose_name="创建人",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"modifier",
|
||||||
|
models.CharField(
|
||||||
|
blank=True,
|
||||||
|
db_comment="修改人",
|
||||||
|
help_text="修改人",
|
||||||
|
max_length=64,
|
||||||
|
null=True,
|
||||||
|
verbose_name="修改人",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"update_time",
|
||||||
|
models.DateTimeField(
|
||||||
|
auto_now=True,
|
||||||
|
db_comment="修改时间",
|
||||||
|
help_text="修改时间",
|
||||||
|
null=True,
|
||||||
|
verbose_name="修改时间",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"create_time",
|
||||||
|
models.DateTimeField(
|
||||||
|
auto_now_add=True,
|
||||||
|
db_comment="创建时间",
|
||||||
|
help_text="创建时间",
|
||||||
|
null=True,
|
||||||
|
verbose_name="创建时间",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"is_deleted",
|
||||||
|
models.BooleanField(
|
||||||
|
db_comment="是否软删除",
|
||||||
|
default=False,
|
||||||
|
verbose_name="是否软删除",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("prov_id", models.IntegerField(verbose_name="省id")),
|
||||||
|
("prov_name", models.CharField(max_length=255, verbose_name="省")),
|
||||||
|
("city_id", models.IntegerField(verbose_name="市id")),
|
||||||
|
("city_name", models.CharField(max_length=255, verbose_name="市")),
|
||||||
|
("area_id", models.IntegerField(verbose_name="区id")),
|
||||||
|
("area_name", models.CharField(max_length=255, verbose_name="区")),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"verbose_name": "省市区",
|
||||||
|
"verbose_name_plural": "省市区",
|
||||||
|
"db_table": "system_city_area",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -329,3 +329,18 @@ class Config(CoreModel):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.name}({self.key})"
|
return f"{self.name}({self.key})"
|
||||||
|
|
||||||
|
|
||||||
|
class CityArea(CoreModel):
|
||||||
|
"""省市区模型"""
|
||||||
|
prov_id = models.IntegerField(verbose_name="省id")
|
||||||
|
prov_name = models.CharField(max_length=255, verbose_name="省")
|
||||||
|
city_id = models.IntegerField(verbose_name="市id")
|
||||||
|
city_name = models.CharField(max_length=255, verbose_name="市")
|
||||||
|
area_id = models.IntegerField(verbose_name="区id")
|
||||||
|
area_name = models.CharField(max_length=255, verbose_name="区")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = "system_city_area"
|
||||||
|
verbose_name = "省市区"
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user