diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-09-23 16:07:22 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-09-23 16:07:22 +0200 |
commit | 6c55681833bd8c45435586ea767ac2324eeac6dc (patch) | |
tree | cdabc09a72b01a94789bd45228c9e1f1e48088aa /ishtar_common/data_importer.py | |
parent | 9ca517f197978bce8dd8f77aea083166861a83bc (diff) | |
download | Ishtar-6c55681833bd8c45435586ea767ac2324eeac6dc.tar.bz2 Ishtar-6c55681833bd8c45435586ea767ac2324eeac6dc.zip |
Imports: manage m2m in m2m
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r-- | ishtar_common/data_importer.py | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index a64b908ea..42dab251c 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -918,18 +918,31 @@ class Importer(object): if not notempty: continue + field_names = model._meta.get_all_field_names() for v in vals: v['defaults'] = v.get('defaults', {}) - if 'history_modifier' in \ - model._meta.get_all_field_names(): + if 'history_modifier' in field_names: v['defaults']['history_modifier'] = \ self.history_modifier - v, created = model.objects.get_or_create( - **v) - if self.import_instance \ - and hasattr(v, 'imports') and created: - v.imports.add(self.import_instance) - m2ms.append((attribute, v)) + m2m_m2ms = [] + for k in v.keys(): + if k not in field_names: + continue + field_object, m, direct, m2m = \ + model._meta.get_field_by_name(k) + if m2m: + m2m_m2ms.append((k, v.pop(k))) + v, created = model.objects.get_or_create( + **v) + for att, objs in m2m_m2ms: + if type(objs) not in (list, tuple): + objs = [objs] + for obj in objs: + getattr(v, att).add(obj) + if self.import_instance \ + and hasattr(v, 'imports') and created: + v.imports.add(self.import_instance) + m2ms.append((attribute, v)) elif hasattr(field_object, 'rel') and field_object.rel and \ type(data[attribute]) == dict: c_path.append(attribute) |