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
> hidden values, 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
>> > hidden form 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, hidden fields 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 a hidden field, 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 at 
> http://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