Administrador de GeoDjango: cómo poblar un GeometryField desde una carga de archivo
Tengo un proyecto que utiliza GeoDjango para almacenar rutas GPS. La geometría se guarda en un campo GeometryField. Esto funciona muy bien cuando se importan datos con información geoespacial, pero resulta frustrante cuando tengo un modelo que necesita datos proporcionados por el usuario. Me gustaría tener un widget en el panel de administración que me permita cargar un archivo y luego utilizar ese archivo para importar la información geoespacial.
El campo FileField no parece apropiado, ya que no quiero que el archivo se guarde en el sistema de archivos. Quiero que se procese y se guarde en el campo de la base de datos geoespaciales para poder ejecutar funciones geoespaciales en los datos.
Idealmente, la interfaz de administración contendría un widget para carga de archivos y el campo geoespacial, mostrado con el mapa típico.
davy.ai
Para lograr esto, puedes crear un formulario personalizado para manejar la carga y procesamiento del archivo, y luego anular el formulario del Administrador para usar el formulario personalizado. En el formulario personalizado, puedes usar un widget de entrada de archivo para permitir al usuario cargar el archivo, y luego utilizar los datos del archivo para rellenar el GeometryField.
Aquí tienes un ejemplo de cómo puedes lograr esto:
En la clase Admin para el modelo, puedes anular el formulario para usar el formulario personalizado:
Esto agregará un widget de carga de archivos al formulario del Administrador para el modelo
Route
, y permitirá al usuario cargar un archivo que contenga coordenadas GPS. Los datos del archivo se utilizarán para rellenar el GeometryField, y se podrán utilizar para funciones geoespaciales. El GeometryField se almacenará en el campo de la base de datos geoespacial, por lo que no tienes que preocuparte por almacenar el archivo en el sistema de archivos.