summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/wizards.py70
1 files changed, 35 insertions, 35 deletions
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 5229880ef..e3df00771 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -38,18 +38,6 @@ class Wizard(NamedUrlWizardView):
@staticmethod
def _check_right(step, condition=True):
'''Return a method to check the right for a specific step'''
- """
- def check_right(self, request, storage):
- cond = condition
- if callable(condition):
- cond = condition(self, request, storage)
- if not cond:
- return False
- person_type = request.user.ishtaruser.person.person_type
- if person_type.txt_idx == 'administrator':
- return True
- if person_type.rights.filter(url_name=step).count():
- return True"""
def check_right(self):
cond = condition
if callable(condition):
@@ -58,11 +46,8 @@ class Wizard(NamedUrlWizardView):
return False
if not hasattr(self.request.user, 'ishtaruser'):
return False
- person_type = self.request.user.ishtaruser.person.person_type
- if person_type.txt_idx == 'administrator':
- return True
- if person_type.rights.filter(url_name=step).count():
- return True
+ return self.request.user.ishtaruser.has_right(('administrator',
+ step))
return check_right
def __init__(self, *args, **kwargs):
@@ -74,13 +59,6 @@ class Wizard(NamedUrlWizardView):
condition = self.condition_dict.get(form_key, True)
cond = self._check_right(form_key, condition)
self.condition_dict[form_key] = cond
- """
- for form_key in self.form_list.keys()[:-1]:
- condition = True
- if form_key in self.condition_list:
- condition = self.condition_list.get(form_key, True)
- cond = self._check_right(form_key, condition)
- self.condition_list[form_key] = cond"""
def get_prefix(self, *args, **kwargs):
"""As the class name can interfere when reused prefix with the url_name
@@ -137,7 +115,11 @@ class Wizard(NamedUrlWizardView):
if not isinstance(values, list):
for key in values:
form_key = next_step + '-' + key
- prefixed_values[form_key] = values[key]
+ if isinstance(values, MultiValueDict):
+ prefixed_values.setlist(form_key,
+ values.getlist(key))
+ else:
+ prefixed_values[form_key] = values[key]
else:
for formset_idx, v in enumerate(values):
prefix = u"-%d-" % formset_idx
@@ -222,7 +204,9 @@ class Wizard(NamedUrlWizardView):
value = _(u"No")
elif key in associated_models:
values = []
- if "," in unicode(value):
+ if type(value) in (tuple, list):
+ values = value
+ elif "," in unicode(value):
values = unicode(value).split(",")
else:
values = [value]
@@ -309,7 +293,17 @@ class Wizard(NamedUrlWizardView):
value = model.objects.get(pk=value)
else:
value = None
- dct[key] = value
+ if hasattr(form, 'base_model') and form.base_model and \
+ form.base_model == key:
+ whole_associated_models.append(form.base_model)
+ if value:
+ vals = value
+ if type(vals) not in (list, tuple):
+ vals = [vals]
+ for val in vals:
+ m2m.append((form.base_model, val))
+ else:
+ dct[key] = value
return self.save_model(dct, m2m, whole_associated_models, form_list,
return_object)
@@ -363,7 +357,7 @@ class Wizard(NamedUrlWizardView):
if hasattr(m, 'related'):
c_item = m.related.model(**other_objs[dependant_item])
setattr(obj, dependant_item, c_item)
- obj.save()
+ obj.save()
obj.save()
else:
adds = {}
@@ -630,14 +624,20 @@ class Wizard(NamedUrlWizardView):
return initial
if hasattr(c_form, 'base_fields'):
for base_field in c_form.base_fields.keys():
- fields = base_field.split('__')
value = obj
- for field in fields:
- if not hasattr(value, field) or \
- getattr(value, field) == None:
- value = obj
- break
- value = getattr(value, field)
+ if hasattr(c_form, 'base_model') and \
+ base_field == c_form.base_model:
+ key = c_form.base_model + 's'
+ initial.setlist(base_field, [unicode(val.pk)
+ for val in getattr(obj, key).all()])
+ else:
+ fields = base_field.split('__')
+ for field in fields:
+ if not hasattr(value, field) or \
+ getattr(value, field) == None:
+ value = obj
+ break
+ value = getattr(value, field)
if value == obj:
continue
if hasattr(value, 'pk'):