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.