All,

I have managed to get some code working that passes extra kwargs to the __init__() function of the member forms of a formset. This is good. But I have no idea why it works. Here is my basic code:

<snip>

class MyModel(models.Model):
  myField = models.CharField(max_length=10)

class MyForm(ModelForm):
  _request = None
  class Meta:
    model = MyModel
  def __init__(self,*args,**kwargs):
    self._request = kwargs.pop("request",None)
    super(MyForm,self).__init__(*args,**kwargs)
    # do something clever with request...

class MyFormsetBase(BaseModelFormSet):
  _request = None

  def __init__(self,*args,**kwargs):
    self.request = kwargs.pop("request",None)
    SubFormClass = self.form
    self.form = curry(SubFormClass,request=self._request)
    super(MyFormsetBase,self).__init(*args,**kwargs)

MyFormset = modelformset_factory(MyModel,formset=MyFormsetBase,can_delete=True)
MyFormset.form = staticmethod(curry(MyForm,request=MyFormsetBase._request))

</snip>

So if I initialize a formset like this:

<snip>
  # assume I got myRequest from my view function...
  myFormset = MyFormset(request.POST,request=myRequest)
</snip>

Then everything works; the forms of my formset are passed in "request" during initialization. But I don't understand what's happening. Why do I have to set the forms attribute twice - once inside the formset __init__() override, and once outside the class definition? What's going on here?

Any advice would be appreciated.
            else:
value[2] = subFormClass(queryset=qs,prefix=key,request=self._request)


|
|

--
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