diff options
| author | Étienne Loks <etienne.loks@proxience.com> | 2016-01-10 15:35:51 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@proxience.com> | 2016-01-10 15:35:51 +0100 | 
| commit | 11d7e76203e13a6d4c2a0c9aa29bd2d1dd86f5b6 (patch) | |
| tree | 8d8e7c09faf179b2fed07878d1cf450a245a78d0 /ishtar_common/wizards.py | |
| parent | 19fcd922361b045894c0eeb56e095d785299909e (diff) | |
| parent | 2c063aace94e5a9f3b5dc596e4a502ef062db059 (diff) | |
| download | Ishtar-11d7e76203e13a6d4c2a0c9aa29bd2d1dd86f5b6.tar.bz2 Ishtar-11d7e76203e13a6d4c2a0c9aa29bd2d1dd86f5b6.zip | |
Merge branch 'master' into master-land-planner-2999
Diffstat (limited to 'ishtar_common/wizards.py')
| -rw-r--r-- | ishtar_common/wizards.py | 30 | 
1 files changed, 23 insertions, 7 deletions
| diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index d00766978..031498ca3 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -326,7 +326,7 @@ class Wizard(NamedUrlWizardView):                          for val in values:                              item = associated_models[key].objects.get(pk=val)                              if hasattr(item, 'short_label'): -                                value = item.short_label +                                value = unicode(item.short_label)                              else:                                  value = unicode(item)                              rendered_values.append(value) @@ -545,30 +545,46 @@ class Wizard(NamedUrlWizardView):              # material_index management for baseitems              obj.save()          m2m_items = {} +        # clear +        # TODO! perf - to be really optimized          for model in whole_associated_models: -            getattr(obj, model + 's').clear() +            related_model = getattr(obj, model + 's') +            # clear real m2m +            if hasattr(related_model, 'clear'): +                related_model.clear() +            else: +                for r in related_model.all(): +                    r.delete()          for key, value in m2m: +            related_model = getattr(obj, key + 's')              if key not in m2m_items:                  if type(key) == dict:                      vals = [] -                    for item in getattr(obj, key + 's').all(): +                    for item in related_model.all():                          v = {}                          for k in value.keys():                              v[k] = getattr(item, k)                          vals.append(v)                      m2m_items[key] = vals                  else: -                    m2m_items[key] = getattr(obj, key + 's').all() +                    m2m_items[key] = related_model.all()              if value not in m2m_items[key]:                  if type(value) == dict: -                    model = getattr(obj, key + 's').model +                    model = related_model.model                      if issubclass(model, models.BaseHistorizedItem):                          value['history_modifier'] = self.request.user +                    # not m2m -> foreign key +                    if not hasattr(related_model, 'clear'): +                        assert hasattr(model, 'MAIN_ATTR'), \ +                            u"Must define a MAIN_ATTR for " + \ +                            unicode(model.__class__) +                        value[getattr(model, 'MAIN_ATTR')] = obj                      value = model.objects.create(**value)                      value.save()                  # check that an item is not add multiple times (forged forms) -                if value not in getattr(obj, key + 's').all(): -                    getattr(obj, key + 's').add(value) +                if value not in related_model.all() and\ +                        hasattr(related_model, 'add'): +                    related_model.add(value)                      # necessary to manage interaction between models like                      # material_index management for baseitems                      obj.save() | 
