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????
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
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.
This doesn't feel very tidy to me, I think the form should have the
hidden values, but it works!
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
> --
> You received this message because you are subscribed to the Google Groups "Django users" group.
> To post to this group, send email to django...@googlegroups.com.
> To unsubscribe from this group, send email to django-users...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
>
>
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!
> >> >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.
Thanks.
Phoebe.
On Apr 1, 7:01 pm, Nuno Maltez <nuno.li...@gmail.com> wrote:
> I think the form I sent, with ModelChoiceField, will validate with the
> returned values without any further code. Or am I missing something
> obvious?
>