From e0ff8955ce09d5c3acfdba1e2d0fef1fe315d711 Mon Sep 17 00:00:00 2001 From: XIE7654 <765462425@qq.com> Date: Mon, 13 Oct 2025 20:38:58 +0800 Subject: [PATCH] feat: add CityArea --- backend/data/省市区.xlsx | Bin 0 -> 47547 bytes .../commands/import_city_area_data.py | 35 +++++++ backend/system/migrations/0005_cityarea.py | 99 ++++++++++++++++++ backend/system/models.py | 15 +++ 4 files changed, 149 insertions(+) create mode 100644 backend/data/省市区.xlsx create mode 100644 backend/system/management/commands/import_city_area_data.py create mode 100644 backend/system/migrations/0005_cityarea.py diff --git a/backend/data/省市区.xlsx b/backend/data/省市区.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a7797e7385781d96d29161a71f7be45becfb4457 GIT binary patch literal 47547 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

`9ul5c7vQYx)g_}a_=LtaQBM( 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 I^WUfc0?ls9asU7T literal 0 HcmV?d00001 diff --git a/backend/system/management/commands/import_city_area_data.py b/backend/system/management/commands/import_city_area_data.py new file mode 100644 index 0000000..01f5c6b --- /dev/null +++ b/backend/system/management/commands/import_city_area_data.py @@ -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} 未找到')) \ No newline at end of file diff --git a/backend/system/migrations/0005_cityarea.py b/backend/system/migrations/0005_cityarea.py new file mode 100644 index 0000000..618d3fc --- /dev/null +++ b/backend/system/migrations/0005_cityarea.py @@ -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", + }, + ), + ] diff --git a/backend/system/models.py b/backend/system/models.py index 8552811..c1953bf 100644 --- a/backend/system/models.py +++ b/backend/system/models.py @@ -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 +