No it is just that SQLFORM.factory is not associated to a db object
and does not know what to do. You have to explicit. What you did is
correct.

On Jun 1, 9:34 am, jc <j-cl...@lineone.net> wrote:
> When playing around with uploads, I tried to get the example from the
> web2py book working:
>
> def form_from_factory():
>     form = SQLFORM.factory(
>         Field('your_name', requires=IS_NOT_EMPTY()),
>         Field('your_image', 'upload'))
>     if form.accepts(request.vars, session):
>         response.flash = 'form accepted'
>         session.your_name = form.vars.your_name
>         session.filename = form.vars.your_image
>     elif form.errors:
>         response.flash = 'form has errors'
>     return dict(form=form)
>
> When run, it gave me this error (on a brand new version 1.95.1)
>
> Traceback (most recent call last):
>   File "/home/jon/code/sandpit/web2py/gluon/restricted.py", line 181,
> in restricted
>     exec ccode in environment
>   File "/home/jon/code/sandpit/web2py/applications/upload/controllers/
> upload.py", line 14, in <module>
>   File "/home/jon/code/sandpit/web2py/gluon/globals.py", line 133, in
> <lambda>
>     self._caller = lambda f: f()
>   File "/home/jon/code/sandpit/web2py/applications/upload/controllers/
> upload.py", line 6, in form_from_factory
>     if form.accepts(request.vars, session):
>   File "/home/jon/code/sandpit/web2py/gluon/sqlhtml.py", line 1146, in
> accepts
>     newfilename = field.store(source_file, original_filename)
>   File "/home/jon/code/sandpit/web2py/gluon/dal.py", line 4966, in
> store
>     raise RuntimeError, "you must specify a
> Field(...,uploadfolder=...)"
> RuntimeError: you must specify a Field(...,uploadfolder=...)
>
> To fix it I had to
> - import os
> - change the upload field to
> Field('your_image', 'upload',
> uploadfolder=os.path.join(request.folder,'uploads'))
>
> I thought uploadfield should default to what I have added, from the
> description of Field in the book.
>
> Have I done something stupid?

Reply via email to