diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-09 01:26:27 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-24 19:42:35 +0200 |
commit | 9506fb493ebdf22674f7fee54712bbd5890d55c0 (patch) | |
tree | f3c87f14656786894e31086be9b73ddcb05bbbb9 /ishtar_common | |
parent | 1cb936f624dcaf7865e8d6100fb3d1cfeb652cc2 (diff) | |
download | Ishtar-9506fb493ebdf22674f7fee54712bbd5890d55c0.tar.bz2 Ishtar-9506fb493ebdf22674f7fee54712bbd5890d55c0.zip |
Importers: fix default management
- allow arbitrary values
- allow values directly related to the main model of the import
- add a "get_default" in attribute configuration in order to force use of
default settings
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/data_importer.py | 8 | ||||
-rw-r--r-- | ishtar_common/models_imports.py | 13 |
2 files changed, 17 insertions, 4 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index d44a19319..baf943068 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -1574,6 +1574,9 @@ class Importer(object): if attribute == 'data': # json field # no need to do anything return + if attribute == 'get_default': + # force evaluation of default value for this field + return try: field_object = cls._meta.get_field(attribute) except FieldDoesNotExist: @@ -1720,6 +1723,11 @@ class Importer(object): defaults[k] = dct.pop(k) else: dct.pop(k) + if "get_default" in dct and dct["get_default"]: + dct.pop("get_default") + new_dct = defaults.copy() + new_dct.update(dct) + dct = new_dct obj = None if self.simulate: diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index a774cef6d..315feba7b 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -241,7 +241,9 @@ def get_associated_model(parent_model, keys): OBJECT_CLS = parent_model fields = get_model_fields(OBJECT_CLS) for idx, item in enumerate(keys): - if not idx: + if item in (u"-", u""): + model = None + elif not idx: if item not in fields: raise ImporterError( unicode( @@ -286,7 +288,7 @@ class ImporterDefault(models.Model): @property def keys(self): - return tuple(self.target.split('__')) + return tuple(t for t in self.target.split('__') if t not in (u"-", u"")) @property def associated_model(self): @@ -297,7 +299,10 @@ class ImporterDefault(models.Model): def values(self): values = {} for default_value in self.default_values.all(): - values[default_value.target] = default_value.get_value() + target = default_value.target + if target == u"-": + target = u"" + values[target] = default_value.get_value() return values @@ -341,7 +346,7 @@ class ImporterDefaultValues(models.Model): return field = fields[target] if not hasattr(field, 'rel') or not hasattr(field.rel, 'to'): - return + return self.value model = field.rel.to # if value is an id try: |