2014-01-14 23 views
0

我在一种形式的两个表格有问题。我使用书中的示例作为参考,但是我在表单中插入图像,它上传文件但URL(图像名称)全都是错误的,我不知道如何让它将正确的url作为图像名称。web2py,一种形式的两个表格,带图像上传

这里是我的代码:

db.define_table('forum', 
       Field('title','string', unique=True, label=T('Title')), 
       Field('body','text', requires=IS_NOT_EMPTY(),label=T('Body')), 
       Field('posted_on','datetime',readable=False, writable=False), 
       Field('posted_by','reference auth_user',readable=False, writable=False), 
       Field('category',db.category)) 

db.define_table('doc', 
       Field('forum_id', 'reference forum',readable=False, writable=False), 
       Field('image','upload',uploadfolder=os.path.join(request.folder,'uploads'), autodelete=True), 
       Field('posted_on', 'datetime',default=request.now, readable=False, writable=False), 
       Field('posted_by','reference auth_user', readable=False, writable=False)) 


def post(): 
    form=SQLFORM.factory(db.forum,db.doc) 
    db.forum.posted_on.default =request.now 
    db.forum.posted_by.default = auth.user 
    db.doc.posted_on.default = request.now 
    db.doc.posted_by.default= auth.user 

    if form.process().accepted: 
     id = db.forum.insert(**db.forum._filter_fields(form.vars)) 
     form.vars.forum_id=id 
     id = db.doc.insert(**db.doc._filter_fields(form.vars)) 
     session.flash='Form Posted' 
     redirect(URL('community')) 
     redirect 
    return dict(form=form) 

回答

1

SQLFORM.factory()有虚表(默认名为 “no_table”)创建了一个虚拟DAL实例。上传字段在存储文件时使用DAL表的名称作为新文件名的一部分。文件名应该以“doc。”开头,但是会以“no_table”开头。一种解决方法是通过SQLFORM.factory()指定创建的虚表的名称:

SQLFORM.factory(db.forum, db.doc, table_name='doc') 

显然,如果两个表包含上传字段是行不通的,所以你需要在这种情况下,更复杂的解决方法(这将涉及在致电form.process()之前直接从request.vars中提取上传的文件 - 可以使用db.doc.image.store()方法重命名/存储它们)。