[Zope] How could I make a form with multiple actions
Wayne Connolly
wayne@c-media.com.au
Wed, 26 Feb 2003 18:43:36 -0800 (PST)
Thanks Cameron,
You are the first to respond and I thank you very
much. However I have resolved this through hard work
and a lot of mistakes...
It ended up being very similar to your suggestion
below however i added the ability to put a user
friendly name for the file which then becomes the zope
object name...
It turned out perfectly. If you would like to see the
py script its below. I had repurposed this how-to
http://www.zopelabs.com/cookbook/995659423 I changed
it slightly to enable concurrent db referencing.. It
works buetifally.
Thanks again.
REQUEST=context.REQUEST
sentFiles = {}
for key in context.REQUEST.keys(): # get
all the ids
if key[:5]=='file_' and key[-3:]=='_id': # we
find id file_XXX_id
sentFiles[REQUEST[key]]=''
for key in context.REQUEST.keys():
if key[:5]=='file_' and key[-3:]!='_id': #we've
got a file
#found its id and make sure file exists
if sentFiles.has_key(REQUEST[key+'_id']) and
REQUEST[key].filename:
sentFiles[REQUEST[key+'_id']]=REQUEST[key]
else:
del sentFiles[REQUEST[key+'_id']]
#remove keys that dont have files
#now that we have created a dictionary w/ a id and we
know its value is a uploaded file
#lets write them to the context's folder
for k in sentFiles.keys():
container.Files.manage_addFile(k, sentFiles[k])
res=context.dbInsertMethod()
return 'Finished updating the database and adding ' +
str(len(sentFiles)) + ' files. <a href="add">Add
More</a>, <a href="browse">Browse</a> or <a
href="index_html">Go Home</a>'
--- J Cameron Cooper <jccooper@jcameroncooper.com>
wrote:
> >
> >
> >I have a form which i require to do two things
> with.
> >1. Insert data into a MySQLdb table.
> >2. Upload a file to the zope file system.
> >
> >I can do both indiviually no problems.
> >
> >I want to do this so i have a mysql refrence to the
> >file but dont want the file actually in the mysql
> db.
> >I want all this data linked.
> >
> >My problem is that I want to do both at once by
> >clicking the same submit button.
> >
> >I was thinking that maybe I could pass all data to
> a
> >py script and have it deal with the input one at a
> >time. But I couldnt come up with the syntax. It
> doesnt
> >seem to gel in my dense skull.
> >
> >
> >Any idea's?
> >
> >
> Hard to say without more context, but I'll give it a
> shot:
>
> There's two components:
>
> 1) a form that has fields for your database data (a,
> b, c) and your
> file. The form's action is...
>
> 2) a script to do the processing. It calls a ZSQL
> method to do the
> database insert and adds a file to the ZODB
> (probably named after your
> primary key.)
>
> So in your HTML upload page:
>
> ...
> <form method="post" action="multiScript">
> ...
> <input type="text" name="key" />
> <input type="text" name="a" />
> <input type="text" name="b" />
> ...
> <input type="file" name="upfile" />
> ...
> </form>
> ...
>
> and in the Python Script:
>
> request = container.REQUEST
> ...
> context.someZSQLMethod(key=request.key, a=request.a,
> b=request.b)
> context.manage_addFile(id=request.key,
> file=request.upfile, title="title",
>
> precondition="precondition",
> content_type="content_type")
> # note that everything after id is actually optional
> ...
> # return something or redirect
>
>
> This is of course only a skeleton, but I think all
> the fundamentals are
> there.
>
> --jcc
>
>
>
>
__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - forms, calculators, tips, more
http://taxes.yahoo.com/