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 | 7bebd57384877cb01510f27d00a6b7ad156ed468 (patch) | |
| tree | cdabc09a72b01a94789bd45228c9e1f1e48088aa | |
| parent | 10885a31d30fdd592c758ead7530a403ba17bdef (diff) | |
| download | Ishtar-7bebd57384877cb01510f27d00a6b7ad156ed468.tar.bz2 Ishtar-7bebd57384877cb01510f27d00a6b7ad156ed468.zip | |
Imports: manage m2m in m2m
| -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) | 
