summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
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
commit6c55681833bd8c45435586ea767ac2324eeac6dc (patch)
treecdabc09a72b01a94789bd45228c9e1f1e48088aa /ishtar_common/data_importer.py
parent9ca517f197978bce8dd8f77aea083166861a83bc (diff)
downloadIshtar-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.py29
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)