web2py,一个表单中的两个表,带有图像上传

时间:2014-01-14 21:56:29

标签: web2py

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

这是我的代码:

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 个答案:

答案 0 :(得分:1)

SQLFORM.factory()创建一个带有虚拟表的虚拟DAL实例(默认情况下名为“no_table”)。上载字段在存储文件时使用DAL表的名称作为新文件名的一部分。文件名应以“doc。”开头,而是以“no_table”开头。解决方法是指定由SQLFORM.factory()

创建的虚拟表的名称
SQLFORM.factory(db.forum, db.doc, table_name='doc')

显然,如果两个表都包含上传字段,则无效,因此在这种情况下您需要更复杂的解决方法(这将涉及在调用request.vars之前直接从form.process()提取上传的文件} - 可以使用db.doc.image.store()方法重命名/存储它们。