Thanks a lot. Your solution was the right one. However, I just needed
to provide 'pid' as the only argument for the pop method.

Now when I use the following command in my view it doesn't give me any
error:

form = VoteRadioForm(request.POST, pid = 2 )

However, I'm having a problem with form validation since is_valid
returns false. I think my form is not created correctly. Because when
I issue cleaned_data method, I get the following error:

'VoteRadioForm' object has no attribute 'cleaned_data'

I need to sleep now. Hopefully, tomorrow I am able to figure out this
problem.

Thanks

On Jun 16, 3:51 am, Daniel Roseman <dan...@roseman.org.uk> wrote:
> On Jun 16, 10:30 am, DevelopsDjangoApps <mom...@gmail.com> wrote:
>
>
>
>
>
> > Hi,
>
> > I have created a form class like this:
>
> > class VoteRadioForm(forms.Form):
>
> >     choices =
> > forms.ModelChoiceField(queryset=Choice.objects.filter(poll__active=
> > True, poll__id = 2),
> >                                empty_label= None,
> >                                widget=  forms.RadioSelect,
> >     )
>
> > This class gives me dynamic number of entries for my form, based on
> > the poll_id. But as you may have already seen it, the poll__id is
> > hardcoded in this example. In order to pass different values to
> > poll__id, I tried to generated my choices element inside the __init__
> > method like this:
>
> > #choices =
> > forms.ModelChoiceField(queryset=Choice.objects.filter(poll__active=
> > True, poll__id = 2),
> >     def __init__(self, pid = None, *args, **kwargs):
> >         super(VoteRadioForm, self).__init__()
> >         self.fields['ch'] =
> > forms.ModelChoiceField(queryset=Choice.objects.filter(poll__active=
> > True, poll__id = pid),
> >                                     empty_label= None,
> >                                     widget=  forms.RadioSelect,
> >         )
>
> > The first example(Hardcoded version) works perfectly fine. The second
> > example generates the form correctly, when I use:
>
> > form = VoteRadioForm(i)
>
> > However, when I try to validate the data and pass the request object
> > to it, it gives me the following error:
>
> > int() argument must be a string or a number, not 'QueryDict'
>
> > I even tried to add *args and **kwargs arguments when initializing my
> > class, just like this example:
>
> >http://www.b-list.org/weblog/2008/nov/09/dynamic-forms/
>
> > But, it doesn't make any difference.
>
> > I'm having Pythong 2.6.5 on my Arch Linux machine.
>
> > I was wondering if anyone has ever had such problem?
>
> > Thanks in advance
>
> It's because your 'pid' parameter is grabbing the first argument to
> the function, which is usually the posted data.
>
> Instead, do this:
>
>     def __init__(self, *args, **kwargs):
>         pid = kwargs.pop('pid', None)
>         super(VoteRadioForm, self).__init__(*args, **kwargs)
>         ...etc...
>
> --
> DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@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