Municipios de España en la base de datos¶
Fuentes:
Desde la pagina de http://www.ine.es se puede acceder Comunidades autónomas, provincias y municipios. El mas laborioso sin duda son los municipios, que son mas de 8000 en toda España.
Las comunidades autónomas y provincias, las hago a mano, respetando los códigos como clave primaria.
Para generar fixtures con Django, descargo el archivo Fichero con todas las provincias / Relación de municipios por provincia e isla
Después ejecuto el siguiente código, que es una modificación de https://iagolast.wordpress.com
Es necesario instalar pip install xlrd
import xlrd
import json
def xls_to_json(filename):
doc = xlrd.open_workbook(filename)
sheet = doc.sheet_by_index(0)
nrows = sheet.nrows
municipios = []
pk = 0
if not is_valid(sheet):
print("Error en {0}, el archivo tiene un formato inesperado.".format(filename))
for row in range(3, nrows):
pk += 1
cod_mun = sheet.cell_value(row, 0)
name_mun = sheet.cell_value(row, 3)
municipios.append(
{'model': 'poblaciones.municipio', 'pk': pk, 'fields': {
'name': name_mun,
'provincia': cod_mun
}}
)
with open('initial_data.json', 'wb') as fp:
json_string = json.dumps(municipios, ensure_ascii=False).encode('utf8')
fp.write(json_string)
def is_valid(sheet):
if str(sheet.cell_value(1, 0)) != "CPRO":
print("Se esperaba CPRO y se tiene {0}".format(sheet.cell_value(2, 0)))
return False
if str(sheet.cell_value(1, 1)) != "CMUN":
print("Se esperaba CMUN y se tiene {0}".format(sheet.cell_value(2, 1)))
return False
if str(sheet.cell_value(1, 2)) != "DC":
print("Se esperaba DC y se tiene {0}".format(sheet.cell_value(2, 2)))
return False
if str(sheet.cell_value(1, 3)) != "NOMBRE":
print("Se esperaba NOMBRE y se tiene {0}".format(sheet.cell_value(2, 3)))
return False
return True
xls_to_json('15codmun.xls')
Después ejecutarlo con ./manage.py loaddata initial_data
Nota
Es necesario tener una tabla con los campos name
y provincia
, donde provincia es la id
de la tabla provincias
class Municipio(models.Model):
"""Municipios."""
name = models.CharField(max_length=255)
provincia = models.ForeignKey(Provincia, related_name='municipio_provincia')