Hi Austin,

I dont know if you still need a solution, but I did, and someone else
might -- also for the sake of completion, here is what i cooked up:
Just inherit from below class, instead of FormWizard, and start
feeding it FormSet classes as one sees fit. Also, there might be
better solutions, e.g. one could probably get away with only
overriding the get_form method, but i figured that would be a little
bit trickier.
This suited my needs just fine. Alas, enjoy.

--
from django.contrib.formtools.utils import security_hash

try:
    import cPickle as pickle
except ImportError:
    import pickle

from django.conf import settings
from django.utils.hashcompat import md5_constructor
from django.forms import BooleanField

class FormSetWizard(FormWizard):
    def render(self, form, request, step, context=None):
        old_data = request.POST
        prev_fields = []
        if old_data:
            hidden = forms.HiddenInput()
            for i in range(step):
                old_form = self.get_form(i, old_data)
                hash_name = 'hash_%s' % i
                if isinstance(old_form, BaseFormSet):
                    for f in old_form.forms +
[old_form.management_form]:
                        prev_fields.extend([bf.as_hidden() for bf in
f])
                else:
                    prev_fields.extend([bf.as_hidden() for bf in
old_form])
                prev_fields.append(hidden.render(hash_name,
old_data.get(hash_name, self.security_hash(request, old_form))))
        return self.render_template(request, form, ''.join
(prev_fields), step, context)

    def security_hash(self, request, form):
        def security_func(request, form, *args):
            data = []
            for f in form.forms + [form.management_form]:
                data.extend([(bf.name, bf.field.clean(bf.data) or '')
for bf in f])
            data.extend(args)
            data.append(settings.SECRET_KEY)
            pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
            return md5_constructor(pickled).hexdigest()
        if isinstance(form, BaseFormSet):
            return security_func(request, form)
        return security_hash(request, form)
--
Best Regards, Yuka Poppe.

On Feb 4, 5:18 pm, Austin Gabel <aga...@gmail.com> wrote:
> Hello,
>
> I am trying to set up a Django FormWizard to add users to my site.  On one
> of the steps I need to be able to enter more than one address.  I was hoping
> to use a FormSet on this step but it does not seem to work as I had
> expected.  The FormSet displays correctly initially, but when I submit the
> form I get an error saying that the FormSet is not iterable.  Has anyone
> made this work before?

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to