全国省市県三級表作成データ+コード
目的
プロジェクト開発では、省・市・県の3級区域表を常に必要とし、後続として使用し、共有にも使用し、重複労働を減らす.
この文書のデータは2020年6月のデータであり、データダウンロード元の参考:【2020年6月】民政部省市区三級連動行政区画データベース
本明細書で使用するテキスト(処理後、直接使用可能、本明細書と一体)のダウンロードリンク:2020年6月全国省・市・県.txt
モデル#モデル#
データコードの追加
シーケンス化
プロジェクト開発では、省・市・県の3級区域表を常に必要とし、後続として使用し、共有にも使用し、重複労働を減らす.
この文書のデータは2020年6月のデータであり、データダウンロード元の参考:【2020年6月】民政部省市区三級連動行政区画データベース
本明細書で使用するテキスト(処理後、直接使用可能、本明細書と一体)のダウンロードリンク:2020年6月全国省・市・県.txt
モデル#モデル#
# models.py
from django.db import models
class ProvinceThreeLevel(models.Model):
"""
"""
area_code = models.CharField(unique=True,max_length=8, verbose_name=' ')
full_name = models.CharField(max_length=16, verbose_name=' ')
short_name = models.CharField(max_length=16, verbose_name=' ')
post_code = models.CharField(max_length=8,null=True, verbose_name=' ')
area_id = models.CharField(max_length=8,null=True, verbose_name=' ')
pinyin = models.CharField(max_length=64, verbose_name=' ')
short_pinyin = models.CharField(max_length=16, null=True,verbose_name=' ')
first_char = models.CharField(max_length=4, null=True,verbose_name=' ')
english = models.CharField(max_length=32, null=True,verbose_name=' ')
longitude = models.CharField(max_length=32,null=True, verbose_name=' ')
latitude = models.CharField(max_length=32,null=True, verbose_name=' ')
parent = models.ForeignKey('self',
on_delete=models.CASCADE,
related_name='sub_areas',
null=True,
verbose_name=' ')
class Meta:
db_table = 'province_three_level'
verbose_name = ' '
verbose_name_plural = ' '
データコードの追加
# add_province.py
import os
import sys
import django
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "forest_monitor.settings")
django.setup()
from user_profile.models import ProvinceThreeLevel
def save_one(area):
area_code, parent, full_name, area_id, post_code, short_name, pinyin, short_pinyin, first_char, english, longitude, latitude = tuple(
area.strip().split(','))
save_data = {
}
for key, value in locals().items():
if key in ['save_data','area']:
continue
if value:
save_data[key] = value
if parent == '0':
del save_data['parent']
else:
parent_obj=ProvinceThreeLevel.objects.get(area_code=parent)
save_data['parent']=parent_obj
if not ProvinceThreeLevel.objects.filter(area_code=area_code).exists():
ProvinceThreeLevel.objects.create(**save_data)
def main():
with open('./ .txt', 'r', encoding='utf-8') as fr:
areas = fr.readlines()
for area in areas:
save_one(area)
if __name__ == "__main__":
main()
シーケンス化
# serializer.py
class ProvinceThreeSerializer(serializers.ModelSerializer):
children=serializers.SerializerMethodField() #
value=serializers.SerializerMethodField() #
lable=serializers.SerializerMethodField() #
class Meta:
model = ProvinceThreeLevel
fields=('value','lable','children')
def get_children(self,obj):
res=ProvinceThreeSerializer(obj.sub_areas,many=True).data
return res
def get_value(self,obj):
return obj.area_code
def get_lable(self,obj):
return obj.full_name