That's one option, the problem is changing the course value returned
from the form into a course object so that the form will validate.
This turned out to be a surprising amount of trouble (because you have
to do it before validation), hence reason for doing simpler work
around.

On Apr 1, 2:08 pm, Nuno Maltez <nuno.li...@gmail.com> wrote:
> What about:
>
> class CourseBook(ModelForm):
>    course = ModelChoiceField(queryset=Course.objects.all(),
> widget=HiddenInput())
>
>    class Meta:
>        model = CourseBooking
>
> and in your view:
>
> form = CourseBook(initial = {'course': course.pk})
>
> Nuno
>
> On Wed, Mar 31, 2010 at 8:06 PM, phoebebright <phoebebright...@gmail.com> 
> wrote:
> > Final approach:
> > in the forms.py excluded the courses foreign key field
> > in models.py made courses blank and nullable
> > didn't pass any initial values to the form
> > in the view, saved the form like this:
> >            item = Courses.objects.get(pk=whatever)
> >            obj = form.save(commit=False)
> >            obj.course = item
> >            obj.save()
>
> > This doesn't feel very tidy to me, I think the form should have the
> >hiddenvalues, but it works!
>
> > On Mar 31, 4:15 pm, phoebebright <phoebebright...@gmail.com> wrote:
> >> Brandon, Thanks for your suggestion.
> >> I tried passing it an ID, but as you say, I also have to override the
> >> save.  What I don't understand is why it does it fine if the form
> >> includes the foreign key in a popup?  They are both passing back
> >> integers after all.
>
> >> Also failed to get the save method working, tried to pass in the
> >> course instance, but it still ends up trying to save with the id of
> >> the course.  Is it not using cleaned_data?
>
> >>     def save(self, course=False, force_insert=False,
> >> force_update=False, commit=True):
> >>         if course:
> >>             self.cleaned_data['course'] = course
> >>             return super(CourseBook, self).save(commit=commit)
>
> >> Any suggestions welcome as I've spent the whole afternoon on this - I
> >> won't go through the many other workarounds that havn't worked!
>
> >> Phoebe.
>
> >> On Mar 31, 4:02 pm, Brandon Taylor <btaylordes...@gmail.com> wrote:
>
> >> > Hi there,
>
> >> > Instead of using the course object in your initial data, which will
> >> > pass in the __unicode__ representation of the object, pass in the id:
>
> >> > form = CouseBook(initial = {'course': course.id})
>
> >> > That should get you the numeric id, but you'll also need to override
> >> > your save method to get the course object to assign when you save your
> >> > CourseBook form, as you can't assign an integer (coming from your
> >> >hiddenform field) to the value of a ForeignKey field on a model.
>
> >> > HTH,
> >> > Brandon
>
> >> > On Mar 31, 8:20 am, phoebebright <phoebebright...@gmail.com> wrote:
>
> >> > > Displayed fields resolve as expected,hiddenfields cause errors.
>
> >> > > This works:
>
> >> > > in the model
> >> > > CourseBook has a foreign key to Course
>
> >> > > In the view:
>
> >> > > course = Course.objects.get(pk=whatever)
> >> > > form = CouseBook(initial = {'course': course})
>
> >> > > in the Form:
>
> >> > > class CourseBook(ModelForm):
> >> > >     class Meta:
> >> > >         model = CourseBooking
>
> >> > > The web page now displays a picklist of courses with the initial value
> >> > > highlighted.  I can now do a form.save() no problem.
>
> >> > > However, if I make the course ahiddenfield, which is what I want.
>
> >> > > class CourseBook(ModelForm):
> >> > >     course = forms.CharField(widget=forms.HiddenInput())
>
> >> > >     class Meta:
> >> > >         model = CourseBooking
>
> >> > > then when I come to save() I get a ValueError, unable to assign "My
> >> > > course"  etc. as it tries to put the name of the course into the
> >> > > foreign key instead of a course instance.
>
> >> > > I can work around this putting a save method on the form, but it seems
> >> > > to me django should resolve this for me????
>
> > --
> > 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 
> > athttp://groups.google.com/group/django-users?hl=en.
>
>

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