hehe :-)

doesn´t work when data is posted:

    if request.method == 'POST':
        formset = UploadFormSet(path_server=PATH_SERVER, path=path,
request.POST, request.FILES)

error: __init__() got multiple values for keyword argument 'path'


On Aug 21, 2:55 pm, patrickk <[EMAIL PROTECTED]> wrote:
> got it - passing parameters to formsets. this is just my personal
> opinion, but in my view it´s overly complicated for such a common
> thing ... I thought newforms will make things easier (but that was
> about 4 weeks ago).
>
> class BaseUploadFormSet(BaseFormSet):
>
>     def __init__(self, path_server=None, path=None, **kwargs):
>         self.path_server = path_server
>         self.path = path
>         super(BaseUploadFormSet, self).__init__(**kwargs)
>
>     def _construct_form(self, i, **kwargs):
>         # this works because BaseFormSet._construct_form() passes
> **kwargs
>         # to the form's __init__()
>         kwargs["path_server"] = self.path_server
>         kwargs["path"] = self.path
>         return super(BaseUploadFormSet, self)._construct_form(i,
> **kwargs)
>
> class UploadForm(forms.Form):
>
>     def __init__(self, path_server=None, path=None, *args, **kwargs):
>         self.path_server = path_server
>         self.path = path
>         print self.path_server
>         print self.path
>         super(UploadForm, self).__init__(*args, **kwargs)
>
>     ...
>     define fields here
>     ...
>
> On Aug 21, 2:30 pm, patrickk <[EMAIL PROTECTED]> wrote:
>
> > hmm, this is getting funny ...
>
> >     def _construct_forms(self):
> >         # instantiate all the forms and put them in self.forms
> >         self.forms = []
> >         for i in xrange(self._total_form_count):
> >             self.forms.append(self._construct_form(i))
> >         print self.forms
>
> >     def _construct_form(self, i, **kwargs):
> >         """
> >         Instantiates and returns the i-th form instance in a formset.
> >         """
> >         defaults = {'auto_id': self.auto_id, 'prefix':
> > self.add_prefix(i)}
> >         if self.data or self.files:
> >             defaults['data'] = self.data
> >             defaults['files'] = self.files
> >         if self.initial:
> >             try:
> >                 defaults['initial'] = self.initial[i]
> >             except IndexError:
> >                 pass
> >         # Allow extra forms to be empty.
> >         if i >= self._initial_form_count:
> >             defaults['empty_permitted'] = True
> >         defaults.update(kwargs)
> >         form = self.form(**defaults)
> >         self.add_fields(form, i)
> >         print form
> >         return form
>
> > as you can see, I´ve inserted print in _construct_form and
> > _construct_forms. the print-statement at the end of _construct_form
> > displays the form, but the print-statement in _construct_forms
> > displays: [None, None, None, None, None].
>
> > On Aug 21, 1:36 pm, patrickk <[EMAIL PROTECTED]> wrote:
>
> > > to be more precise:
> > > when I do "print form" in formsets.py in line 96, at the end of
> > > _construct_form, the form is there.
> > > but when trying to display the form(s) in the template, the formset is
> > > empty ...
>
> > > On Aug 21, 12:19 pm, patrickk <[EMAIL PROTECTED]> wrote:
>
> > > > thanks justin.
>
> > > > I´m able to pass the paramters to the form now. unfortunately, the
> > > > form (in the template) is empty now ... no fields at all, so I guess
> > > > there´s something missing here (but I don´t know what).
>
> > > > On Aug 21, 11:34 am, "Justin Fagnani" <[EMAIL PROTECTED]>
> > > > wrote:
>
> > > > > On Thu, Aug 21, 2008 at 12:30 AM, patrickk <[EMAIL PROTECTED]> wrote:
>
> > > > > > I´m not sure (anymore) we´re all talking about the same issue.
>
> > > > > I think we are. I'll see if I can clarify... The broad idea is that
> > > > > you pass the parameters to the formset in your view via an overridden
> > > > > __init__(), then you pass them to the form via an overridden
> > > > > _construct_form().
>
> > > > > Something like this:
>
> > > > > class MyBaseFormSet(BaseFormSet):
> > > > >   def __init__(self, foo=None, **kwargs):
> > > > >     self.foo = foo
> > > > >     super(BaseFormSet, self).__init__(**kwargs)
>
> > > > >   def _construct_form(self, i, **kwargs):
> > > > >     # this works because BaseFormSet._construct_form() passes **kwargs
> > > > >     # to the form's __init__()
> > > > >     super(BaseFormSet, self)._construct_form(i, **{'foo': self.foo})
>
> > > > > class MyForm(Form):
> > > > >   def __init__(self, foo=None, *args, **kwargs):
> > > > >     self.foo = foo
> > > > >     super(BaseForm, self).__init__(*args, **kwargs)
>
> > > > > MyFormSet = formset_factory(MyForm, formset=MyBaseFormSet)
>
> > > > > def view_func(request):
> > > > >   formset = MyFormSet(foo='bar')
> > > > >   ...
>
> > > > > hope that helps,
> > > > >   Justin
>
>
--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to