diff options
-rw-r--r-- | ishtar_common/admin.py | 2 | ||||
-rw-r--r-- | ishtar_common/data_importer.py | 14 | ||||
-rw-r--r-- | ishtar_common/models_imports.py | 26 |
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 |