summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-05 17:24:58 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:23:20 +0100
commit06d5d3417077f5860e35625f5245b75e3a8c40d8 (patch)
tree315a7df8d3ed620a40fe4d74fe4b37fbf9437617 /ishtar_common
parent24ca8234083c3fedef4747f669634a100e6872d9 (diff)
downloadIshtar-06d5d3417077f5860e35625f5245b75e3a8c40d8.tar.bz2
Ishtar-06d5d3417077f5860e35625f5245b75e3a8c40d8.zip
Imports: manage defaults with "__"
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/admin.py2
-rw-r--r--ishtar_common/data_importer.py14
-rw-r--r--ishtar_common/models_imports.py26
3 files changed, 34 insertions, 8 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 10c8c7337..4da0a15ad 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -1773,13 +1773,13 @@ class ImporterColumnAdmin(admin.ModelAdmin):
list_display = (
"label",
"importer_type",
+ "required",
"col_number",
"col_string",
"description",
"formater_type_lbl",
"targets_lbl",
"duplicate_fields_lbl",
- "required",
)
list_filter = (
(
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 5b3509b3e..8d99889fc 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -1389,17 +1389,21 @@ class Importer(object):
default_srs = profile.srs if profile.srs else None
if "geodata" in data:
- geodata = self._defaults.get(("geodata",), {})
+ geodata = copy.deepcopy(self._defaults.get(("geodata",), {}))
geodata.update(data.pop("geodata"))
if default_srs and not [
- 1 for k in geodata if k.startswith("spatial_reference_system")]:
+ 1 for k in geodata if k.startswith("spatial_reference_system") and
+ geodata[k]
+ ]:
geodata["spatial_reference_system"] = default_srs
if "main_geodata" in data:
- main_geodata = self._defaults.get(("main_geodata",), {})
+ main_geodata = copy.deepcopy(self._defaults.get(("main_geodata",), {}))
main_geodata.update(data.pop("main_geodata"))
if default_srs and not [
- 1 for k in main_geodata if k.startswith("spatial_reference_system")]:
+ 1 for k in main_geodata if k.startswith("spatial_reference_system")
+ and main_geodata[k]
+ ]:
main_geodata["spatial_reference_system"] = default_srs
obj, created = self.get_object(self.OBJECT_CLS, data, idx_line=idx_line)
if self.simulate:
@@ -1516,6 +1520,8 @@ class Importer(object):
new_data = data.copy()
if "defaults" in data:
default = new_data.pop("defaults")
+ else:
+ default = {}
q = through_cls.objects.filter(**new_data)
if q.count():
t_obj = through_cls.objects.get(**new_data)
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index e24d300cb..46d92c994 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -446,7 +446,7 @@ class ImporterDefault(models.Model):
target = default_value.target
if target == "-":
target = ""
- values[target] = default_value.get_value()
+ values[target.split("__")[0]] = default_value.get_value()
return values
@@ -488,15 +488,35 @@ class ImporterDefaultValues(models.Model):
def get_value(self):
parent_model = self.default_target.associated_model
+ target = self.target.strip()
+ return self._get_value(parent_model, target)
+
+ def _get_value(self, parent_model, target):
if not parent_model:
return self.value
fields = get_model_fields(parent_model)
- target = self.target.strip()
+ if "__" in target:
+ targets = target.split("__")
+ if targets[0] not in fields:
+ return
+ new_target = "__".join(targets[1:])
+ field = fields[targets[0]]
+ if not hasattr(field, "remote_field") or not hasattr(
+ field.remote_field, "model"
+ ):
+ return self.value
+ new_parent_model = field.remote_field.model
+ return self._get_value(new_parent_model, new_target)
if target not in fields:
return
field = fields[target]
+ if target in ("srid", "txt_idx"):
+ try:
+ return parent_model.objects.get(**{target: self.value})
+ except (ValueError, parent_model.DoesNotExist):
+ pass
if not hasattr(field, "remote_field") or not hasattr(
- field.remote_field, "model"
+ field.remote_field, "model"
):
return self.value
model = field.remote_field.model