I am using django-import-export package to expect a csv file containing a location's name and its longitude and latitude.
I want to parse the longitude and latitude field from the csv to convert them into django.contrib.gis.geos.Point
object so that I can input it to my Location
model's geom
field.
# models.py
from django.contrib.gis.db import models
class Location(models.Model):
name = models.CharField(max_length=200)
geom = models.PointField(null=True, blank=True)
def __str__(self):
return self.name
# admin.py
from .models import Location
from import_export import resources
from import_export.admin import ImportExportModelAdmin
class LocationResource(resources.ModelResource):
geom = Field()
latitude = Field()
longitude = Field()
class Meta:
model = Location
fields = ('id','name', 'latitude', 'longitude')
exclude = ('geom')
export_order = ('id', 'name', 'latitude', 'longitude')
def dehydrate_geom(self, data):
return Point(data.longitude, data.longitude)
class LocationAdmin(ImportExportModelAdmin):
resource_class = LocationResource
admin.site.register(Location, LocationAdmin)
This is how far I got but to no success. Must have:
Location(name='name', geom=Point(longitude, latitude))
CSV file: locations.csv
id,name,longitude,latitude
1,Naga,120.18,18.20
UPDATE 1
Tried using hydrate_<field_name>
but with no success.
class ProjectActivityResource(resources.ModelResource):
latitude = Field(attribute='latitude', column_name='latitude')
longitude = Field(attribute='longitude', column_name='longitude')
class Meta:
model = ProjectActivity
fields = ('id', 'project_site', 'name', 'latitude',
'longitude', 'date_updated')
exclude = ('geom')
export_order = ('id', 'project_site', 'name', 'latitude',
'longitude', 'date_updated')
def hydrate_geom(self, project_activity):
print(project_activity)
return Point(float(project_activity.longitude), float(project_activity.longitude))