summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit6afe48ce4f15f14b75980f62de321185367a3d64 (patch)
tree18e151e014e96d922c2d6f1f163c0fcb04341c5e
parentafb60d9f6d59816fb4e3e1986ab5d2f29f5603fc (diff)
downloadIshtar-6afe48ce4f15f14b75980f62de321185367a3d64.tar.bz2
Ishtar-6afe48ce4f15f14b75980f62de321185367a3d64.zip
Manage save of modifications (refs #51)
-rw-r--r--ishtar/furnitures/forms.py45
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():