Thank you for your help Massimo.
My model is defined as follows:
## Repository
db.define_table('repository',
Field('name', type='string'),
Field('directory', default='applications/init/uploads'),
format='%(name)s')
## Workbench - workbenches stored in the repository
db.define_table('workbench',
Field('repository', 'reference repository'),
Field('name', compute=lambda r:
db.workbench.workbench.retrieve(r.workbench)[0]),
Field('workbench', type='upload', required=True,
custom_store=store_file, custom_retrieve=retrieve_file ),
Field('sequence', 'integer', required=True),
Field('created_date', 'datetime', default=request.now, readable=False,
writable=False),
Field('modified_date', 'datetime', update=request.now, readable=False,
writable=False),
format='%(name)s')
I have a Repository table which is joined to the Workbench table (1:M - a
repository can have many workbenches )
In my controller I have a smartgrid for Repository which has Workbenches as
a linked table. After a Repository has been created, the user can create
Workbenches linked to the Repository. When creating the Workbench I want
the workbench file to be uploaded to the directory in the Repository
location field.
I hope that makes it clear what I'm trying to achieve.
Thank you.
On Monday, December 1, 2014 11:46:57 AM UTC+13, Massimo Di Pierro wrote:
>
> You cannot do this uploadfolder= lambda r:...
> But this is a chicken-egg problem. You want r to be the row but the row is
> not created until after the file is uploaded therefore you cannot specify
> the upload folder as function of something that happens after.
>
> Please explain to us in english of the folder should depend on the upload
> and perhaps we can suggest a way to do it.
>
>
> On Saturday, 29 November 2014 14:08:20 UTC-6, James Burke wrote:
>>
>> How do you create a dynamic uploadfolder for an upload Field?
>>
>> I tried using:
>> uploadfolder= lambda r: db.repository(r.repository_id).directory
>>
>> but i get the error message, I guess it doesn't have the same
>> functionality as compute:
>> cannot concatenate 'str' and 'function' objects
>>
>> I'm also using custom_store/retreive to maintain the files original
>> filename
>>
>> def store_file(file, filename=None, path=None):
>> path = path # "applications/init/uploads"
>> if not os.path.exists(path):
>> os.makedirs(path)
>> pathfilename = os.path.join(path, filename)
>> dest_file = open(pathfilename, 'wb')
>> try:
>> shutil.copyfileobj(file, dest_file)
>> finally:
>> dest_file.close()
>> return filename
>>
>>
>> If I can set the uploadfolder dynamically then it's passed to store_file
>> as path.
>>
>> I also tried:
>> path = db.repository(db.workbench(db.workbench.name==filename).repository
>> ).directory
>>
>> But it can't find a record, I guess because store_file is run before the
>> record is created in the db.
>>
>> Any suggestions?
>>
>> Thank you!
>>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.