diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-07-14 00:38:00 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-07-14 00:39:45 +0200 |
commit | e97485cc82e186e9467d0bcbe01e06dcc31b7f18 (patch) | |
tree | 5e2c6037eb42a917445766e0525ee2705fe88edf /ishtar_common/data_importer.py | |
parent | fa93b0528bbaaf79fc78cae32c4e625102ec8eb8 (diff) | |
download | Ishtar-e97485cc82e186e9467d0bcbe01e06dcc31b7f18.tar.bz2 Ishtar-e97485cc82e186e9467d0bcbe01e06dcc31b7f18.zip |
Imports: remove File from uniqueness detection of instances - forced new are created only one time
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r-- | ishtar_common/data_importer.py | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 834ba0ed9..908aa84c4 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -1164,7 +1164,7 @@ class Importer(object): concat_str=concat_str[idx]) c_row.append(u" ; ".join([v for v in c_values])) - def get_field(self, cls, attribute, data, m2ms, c_path): + def get_field(self, cls, attribute, data, m2ms, c_path, new_created): field_object, model, direct, m2m = \ cls._meta.get_field_by_name(attribute) if m2m: @@ -1229,8 +1229,13 @@ class Importer(object): for k in v.keys(): if k not in field_names: continue - self.get_field(model, k, v, m2m_m2ms, c_c_path) + self.get_field(model, k, v, m2m_m2ms, c_c_path, + new_created) if '__force_new' in v: + # only one forced creation + if attribute in new_created: + continue + new_created.append(attribute) created = v.pop('__force_new') has_values = bool([1 for k in v if v[k]]) if has_values: @@ -1239,8 +1244,19 @@ class Importer(object): continue else: v['defaults'] = v.get('defaults', {}) + extra_fields = {} + # "File" type is a temp object and can be different + # for the same filename - it must be treated + # separatly + for k in v.keys(): + if type(v[k]) == File: + extra_fields[k] = v.pop(k) v, created = model.objects.get_or_create( **v) + for k in extra_fields.keys(): + setattr(v, k, extra_fields[k]) + if extra_fields: + v.save() for att, objs in m2m_m2ms: if type(objs) not in (list, tuple): objs = [objs] @@ -1273,6 +1289,7 @@ class Importer(object): c_path = path[:] # get all related fields + new_created = [] for attribute in list(data.keys()): c_c_path = c_path[:] if not attribute: @@ -1281,7 +1298,8 @@ class Importer(object): if not data[attribute]: continue if attribute != '__force_new': - self.get_field(cls, attribute, data, m2ms, c_c_path) + self.get_field(cls, attribute, data, m2ms, c_c_path, + new_created) # filter uncessary default values create_dict = copy.deepcopy(data) |