gpt4 book ai didi

python - 导入前解析 django-import-export 中的字段

转载 作者:太空狗 更新时间:2023-10-30 00:52:42 24 4
gpt4 key购买 nike

我正在使用 django-import-export 包来获取包含位置名称及其经纬度的 csv 文件。

我想从 csv 中解析经度和纬度字段,将它们转换成 django.contrib.gis.geos.Point对象,以便我可以将其输入我的 Location模特的 geom字段。

# 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)

这是我取得的进展,但没有成功。必须具备:

Location(name='name', geom=Point(longitude, latitude))

CSV 文件:locations.csv

id,name,longitude,latitude
1,Naga,120.18,18.20

更新 1尝试使用 hydrate_<field_name>但没有成功。

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))

最佳答案

当我使用 before_save_instance(self, instance, using_transactions, dry_run) 时解决了这个问题

函数可以在将对象传递给模型之前对其进行修改。

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 before_save_instance(self, instance, using_transactions, dry_run):
instance.geom = Point(float(instance.longitude), float(instance.latitude))
return instance

关于python - 导入前解析 django-import-export 中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57233190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com