diff options
Diffstat (limited to 'ishtar_common/wizards.py')
| -rw-r--r-- | ishtar_common/wizards.py | 30 | 
1 files changed, 27 insertions, 3 deletions
| diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 55c9d0d9d..a237fb327 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -24,12 +24,22 @@ from django.contrib.formtools.wizard.views import NamedUrlWizardView  from django.core.exceptions import ObjectDoesNotExist  from django.core.files.images import ImageFile  from django.db.models.fields.files import FileField +from django.db.models.fields.related import ManyToManyField  from django.shortcuts import render_to_response  from django.template import RequestContext -from django.utils.datastructures import MultiValueDict +from django.utils.datastructures import MultiValueDict as BaseMultiValueDict  from django.utils.translation import ugettext_lazy as _  import models +class MultiValueDict(BaseMultiValueDict): +    def get(self, *args, **kwargs): +        v = super(MultiValueDict, self).getlist(*args, **kwargs) +        if len(v) > 1: +            v = ",".join(v) +        else: +            v = super(MultiValueDict, self).get(*args, **kwargs) +        return v +  class Wizard(NamedUrlWizardView):      model = None      label = '' @@ -211,7 +221,8 @@ class Wizard(NamedUrlWizardView):                          if type(value) in (tuple, list):                              values = value                          elif "," in unicode(value): -                            values = unicode(value).split(",") +                            values = unicode(value +                                            ).strip('[').strip(']').split(",")                          else:                              values = [value]                          rendered_values = [] @@ -344,6 +355,12 @@ class Wizard(NamedUrlWizardView):                     isinstance(obj.__class__._meta.get_field(k), ImageFile)):                      if not dct[k]:                          dct[k] = None +                if isinstance(obj.__class__._meta.get_field(k), +                              ManyToManyField): +                    if not dct[k]: +                        dct[k] = [] +                    elif type(dct[k]) not in (list, tuple): +                        dct[k] = [dct[k]]                  setattr(obj, k, dct[k])              try:                  obj.full_clean() @@ -516,7 +533,8 @@ class Wizard(NamedUrlWizardView):          elif hasattr(form, 'extra_form') and hasattr(form.extra_form, 'fields')\             and form.extra_form.fields.keys():              frm = form.extra_form -        elif hasattr(form, 'forms') and form.forms and form.forms[0].fields.keys(): +        elif hasattr(form, 'forms') and form.forms \ +           and form.forms[0].fields.keys():              frm = form.forms[0]          if frm:              first_field = frm.fields[frm.fields.keyOrder[0]] @@ -675,6 +693,12 @@ class Wizard(NamedUrlWizardView):                              value = obj                              break                          value = getattr(value, field) +                if hasattr(value, 'all') and callable(value.all): +                    if not value.count(): +                        continue +                    initial.setlist(base_field, +                                    [unicode(v.pk) for v in value.all()]) +                    continue                  if value == obj:                      continue                  if hasattr(value, 'pk'): | 
