diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-09 00:46:34 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-09 00:46:34 +0100 | 
| commit | 6afe48ce4f15f14b75980f62de321185367a3d64 (patch) | |
| tree | 18e151e014e96d922c2d6f1f163c0fcb04341c5e /ishtar/furnitures/forms.py | |
| parent | afb60d9f6d59816fb4e3e1986ab5d2f29f5603fc (diff) | |
| download | Ishtar-6afe48ce4f15f14b75980f62de321185367a3d64.tar.bz2 Ishtar-6afe48ce4f15f14b75980f62de321185367a3d64.zip | |
Manage save of modifications (refs #51)
Diffstat (limited to 'ishtar/furnitures/forms.py')
| -rw-r--r-- | ishtar/furnitures/forms.py | 45 | 
1 files changed, 34 insertions, 11 deletions
| diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index d0618ed36..3736029d5 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -176,11 +176,19 @@ class Wizard(NamedUrlSessionFormWizard):                          value = associated_models[key].objects.get(pk=value)                      dct[key] = value          dct = self.get_extra_model(dct, request, storage, form_list) -        obj = self.model(**dct) +        obj = self.get_current_object(request, storage) +        if obj: +            for k in dct: +                if k == 'pk': +                    continue +                setattr(obj, k, dct[k]) +        else: +            obj = self.model(**dct)          obj.save()          for key, value in m2m: -            getattr(obj, key+'s').add(value) -            obj.save() +            if value not in getattr(obj, key+'s').all(): +                getattr(obj, key+'s').add(value) +                obj.save()          res = render_to_response('wizard_done.html', {},                                    context_instance=RequestContext(request))          return return_object and (obj, res) or res @@ -222,8 +230,12 @@ class Wizard(NamedUrlSessionFormWizard):                                  data[ck] = data.pop(key)[0]                  # get a form key                  base_key = form.form.base_fields.keys()[0] -                total_field = len([key for key in data.keys() +                init = self.get_form_initial(request, storage, step) +                if not init: +                    total_field = len([key for key in data.keys()                                     if base_key in key.split('-') and data[key]]) +                else: +                    total_field = len(init)                  data[step + u'-INITIAL_FORMS'] = unicode(total_field)                  data[step + u'-TOTAL_FORMS'] = unicode(total_field + 1)          data = data or None @@ -258,7 +270,11 @@ class Wizard(NamedUrlSessionFormWizard):          return super(Wizard, self).process_post_request(request, storage, *args,                                                          **kwargs) -    def get_form_initial(self, request, storage, step): +    def get_current_object(self, request, storage): +        """ +        Get the current object for an instancied wizard +        """ +        current_obj = None          main_form_key = 'selec-' + self.url_name          pk = main_form_key + '-pk'          if storage.prefix in request.session \ @@ -270,11 +286,16 @@ class Wizard(NamedUrlSessionFormWizard):                  idx = int(request.session[storage.prefix]['step_data']                                                           [main_form_key][pk])                  current_obj = self.model.objects.get(pk=idx) -                return self.get_instanced_init(current_obj, request, storage, -                                               step)              except(TypeError, ObjectDoesNotExist):                  pass -        return super(FileWizard, self).get_form_initial(request, storage, step) +        return current_obj + +    def get_form_initial(self, request, storage, step): +        current_obj = self.get_current_object(request, storage) +        if current_obj: +            return self.get_instanced_init(current_obj, request, storage, +                                           step) +        return super(Wizard, self).get_form_initial(request, storage, step)      def get_instanced_init(self, obj, request, storage, step):          """ @@ -383,9 +404,11 @@ class FileWizard(Wizard):                  dct['operation'] = None                  if 'DELETE' in dct:                      dct.pop('DELETE') -                dct['history_modifier'] = request.user -                parcel = models.Parcel(**dct) -                parcel.save() +                parcel = models.Parcel.objects.filter(**dct).count() +                if not parcel: +                    dct['history_modifier'] = request.user +                    parcel = models.Parcel(**dct) +                    parcel.save()          return res  def get_now(): | 
