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):
|
||||
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