Опция, которую стоит попробовать с LayerMapping
, - это аргумент unique
, который:
Установка в качестве имени или кортежа имен из данной модели , создаст модели, уникальные только для заданных имен. Геометрия от каждого объекта будет добавлена в коллекцию, связанную с уникальной моделью . Принудительно устанавливает режим транзакции 'autocommit'
.
. Проверяя код , выполненный в случае существующего имени unique
, мы видим, что он пытается добавить данную геометрию к любые существующие записи:
if self.unique:
# If we want unique models on a particular field, handle the
# geometry appropriately.
try:
# Getting the keyword arguments and retrieving
# the unique model.
u_kwargs = self.unique_kwargs(kwargs)
m = self.model.objects.using(self.using).get(**u_kwargs)
is_update = True
# Getting the geometry (in OGR form), creating
# one from the kwargs WKT, adding in additional
# geometries, and update the attribute with the
# just-updated geometry WKT.
geom_value = getattr(m, self.geom_field)
if geom_value is None:
geom = OGRGeometry(kwargs[self.geom_field])
else:
geom = geom_value.ogr
new = OGRGeometry(kwargs[self.geom_field])
for g in new:
geom.add(g)
setattr(m, self.geom_field, geom.wkt)
except ObjectDoesNotExist:
# No unique model exists yet, create.
m = self.model(**kwargs)
Если это то, что соответствует вашим потребностям в качестве функциональности, то вы можете попробовать уникальный вариант следующим образом:
lm = LayerMapping(
table,
path,
mapping,
transform=True ,
unique=('field_name_1', 'field_name_2', ...),
encoding='utf-8'
)
Если вышеприведенное не соответствует потребностям вашего проекта, тогда указанные вами параметры будут работать нормально.