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.