I have not solve this problem, please help me~~ It is already two days~~[?]
when I upload the file, the method "add" get the parameter"image", I guess
the "image" is the data of uploaded file. I try to write the data to
disk.(follow the wiki),
I tried like this "data = image.file.read()", from wiki I know the TG should
treat it as file-object. But, It doesn't work. I get the traceback :
data = image.file.read()
AttributeError: 'dict' object has no attribute 'file'
-------------------following: detail----------------------------------
I upload the image. And I use widget "file_fields.widgets.ImageField" to
create a form_table class. like following:
--------------------------------------------------------------------
class AddFields(widgets.WidgetsList):
title = widgets.TextField(
label='Title',
validator=validators.NotEmpty(),
)
image = file_fields.widgets.ImageField(
validator=validators.NotEmpty(),
)
content = widgets.TextArea(
validator=validators.NotEmpty(),
attrs=dict(rows=10, cols=45)
)
add_form = widgets.TableForm(
fields=AddFields(),
name="w_addform",
action="/add",
submit_text="Add new!"
)
-----------------------------------------------------------
In the control.py, I create the method:
@expose()
@error_handler(index)
def add(self,title,content,image,*args, **kw):
p = model.postTable.get(int(post_id))
data = image.file.read()
newPost=model.postTable(
title = title,
content = content,
)
# open file in binary mode for writing
targetFileName = os.path.join(
os.getcwd(),
UPLOAD_DIR,
"image.filename"
)
f = open(targetFileName, 'wb')
f.write(data)
f.close()
tg.flash(
"File uploaded successfully:"%s saved as: %s" \
% (image.filename, targetFileName)
)
newUploadFile = model.uploadedFile(
filename=image.filename,
abspath=targetFileName,
size=0,
referenced_in_posts = p,
)
raise redirect("/")
---------------------------model.py-----------------------------
class postTable(SQLObject):
title = UnicodeCol(length=50)
content = UnicodeCol()
postDate = DateTimeCol(default=datetime.now())
isPublished= BoolCol(default=False)
comments=MultipleJoin('commentTable')
pictures=MultipleJoin('uploadedFile')
class uploadedFile(SQLObject):
filename = UnicodeCol(alternateID=True, length=100)
abspath = UnicodeCol()
size = IntCol()
referenced_in_posts = ForeignKey('postTable')
--------------------traceback----------------------------------
Page handler: <bound method Root.add of <assignment.controllers.Root
object at 0x019FA4B0>>
Traceback (most recent call last):
File
"c:\python25\lib\site-packages\cherrypy-2.3.0-py2.5.egg\cherrypy\_cphttptools.py",
line 121, in _run
self.main()
File
"c:\python25\lib\site-packages\cherrypy-2.3.0-py2.5.egg\cherrypy\_cphttptools.py",
line 264, in main
body = page_handler(*virtual_path, **self.params)
File "<string>", line 3, in add
File
"c:\python25\lib\site-packages\TurboGears-1.0.8-py2.5.egg\turbogears\controllers.py",
line 360, in expose
*args, **kw)
File "<string>", line 5, in run_with_transaction
File
"c:\python25\lib\site-packages\TurboGears-1.0.8-py2.5.egg\turbogears\database.py",
line 359, in so_rwt
retval = func(*args, **kw)
File "<string>", line 5, in _expose
File
"c:\python25\lib\site-packages\TurboGears-1.0.8-py2.5.egg\turbogears\controllers.py",
line 373, in <lambda>
mapping, fragment, args, kw)))
File
"c:\python25\lib\site-packages\TurboGears-1.0.8-py2.5.egg\turbogears\controllers.py",
line 410, in _execute_func
output = errorhandling.try_call(func, *args, **kw)
File
"c:\python25\lib\site-packages\TurboGears-1.0.8-py2.5.egg\turbogears\errorhandling.py",
line 77, in try_call
return func(self, *args, **kw)
File "C:\Documents and
Settings\hanjie\assignment\assignment\controllers.py", line 36, in add
data = image.file.read()
AttributeError: 'dict' object has no attribute 'file'
2009/4/9 Florent Aide <[email protected]>
>
> On Thu, Apr 9, 2009 at 10:55 AM, Diez B. Roggisch <[email protected]> wrote:
> >
> > On Thursday 09 April 2009 10:38:21 跑步鱼 wrote:
> >> Why does it happen
> >> I followed the introduction from wiki~
> >> Anybody can help me?
> >
> > Please show us what the video-object actually is, by printing out it's
> repr or
> > something like that.
>
> from the traceback it seems to be a dict. Maybe you're missing an
> @validate on your exposed save method?
>
> Florent.
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---
<<inline: 331.gif>>

