【问题标题】:Multiple Instances of a table in a web2py formweb2py 表单中表的多个实例
【发布时间】:2012-08-01 00:23:24
【问题描述】:

尝试在 web2py 中创建一个投票应用程序。

型号

db.define_table('t_query',
    Field('f_content', type='text', requires=IS_NOT_EMPTY(),
          label=T('Content')),
    SQLField('is_active',db.auth_user,writable=False,readable=False),
    auth.signature,
    migrate=settings.migrate)

db.define_table('t_option',
    Field('f_ocontent', type='string',requires=IS_NOT_EMPTY(),
          label=T('Option')),
    auth.signature,
    migrate=settings.migrate)

控制器

def ask():
    form=SQLFORM.factory(db.t_query,db.t_option,db.t_option)
    if form.process().accepted:
        id = db.t_query.insert(**db.t_query._filter_fields(form.vars))
        form.vars.client=id
        id = db.t_option.insert(**db.t_option._filter_fields(form.vars))
        response.flash='Thanks for filling the form'
        id = db.t_option.insert(**db.t_option._filter_fields(form.vars))
        response.flash='Thanks for the question'
    return dict(form=form)

查看

{{extend 'layout.html'}}

<h2>Start a Poll</h2>
{{=form}}

输出

我尝试寻找如何让 SQLFORM 在一个表单中多次使用同一个表中的字段。

这是我所期望的:

我该怎么做?

在 web2py@googlegroups https://groups.google.com/forum/#!topic/web2py/48tO5ncC2t4 上问了同样的问题

【问题讨论】:

  • 顺便说一句,我看到你连续有两个response.flash 分配。每次成功处理表单时,第二个将覆盖第一个,因为没有 if 语句来确定何时发送一条闪存消息与另一个...也许现在对您的代码无关紧要,但我想指出来。

标签: database web2py


【解决方案1】:

听起来您希望能够为单个字段存储字符串列表。据我所知,你不能多次重复同一个字段(数据将在数据库中的哪里?只有一个字段可以包含它,所以如果你想要 0. .n 单个字段中的值)

使用它在单个字段中获取多个字符串:

db.define_table(...
  ...
  Field('f_ocontent', 'list:string')
)

这将在内部存储数据:

|option1val|option2val|option3val|

或者,如果为空:

||

当您输入的字符数超过 0 个时,您可以按 Enter 键,它会创建一个新输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多