【问题标题】:web2py multiple formweb2py 多种形式
【发布时间】:2012-04-21 13:20:40
【问题描述】:

我创建了一个多重表单

form = SQLFORM.factury(db.table1,db.table2)

db.table2 有以下字段,字段invoice_id 链接到db.table1catalogue_id 链接到另一个表db.table0

db.define_table('table2',
    Field('id','id'),
    Field('user_id', db.auth_user, default=auth.user_id, writable=False,readable=False,
          label=T('User Id')),
    Field('invoice_id', db.table1,  writable=False,readable=False,
          label=T('Invoice')), 
    Field('catalogue_id', db.table0,
          label=T('Catalogue')),
    format='%(thiscatalogue)s',
    migrate=settings.migrate)

发送表单后,invoice_id 应自动从 web2py 填写并获取sent 数据的ID

但是有这个

Field('invoice_id', db.table1, ... )

使字段在提交前必须有值

【问题讨论】:

  • sent 数据是什么? “invoice_id”应该从哪里来?
  • invoice_iddb.table1中新插入记录的id

标签: python sqlite web2py


【解决方案1】:

参见示例here。在这种情况下,类似于:

form = SQLFORM.factory(db.table1, db.table2)
if form.process().accepted:
    invoice_id = db.table.insert(**db.table1._filter_fields(form.vars))
    form.vars.invoice_id = invoice_id
    db.table2.insert(**db.table2._filter_fields(form.vars))

首先将新发票插入table1,它返回新记录的id。然后,在插入 table2 之前,将 form.vars.invoice_id 设置为新发票记录的 id。

【讨论】:

  • 谢谢有没有像SQLFORM.factory 这样的东西,可以用它来代替crud.read()
  • 你是说你想要一个基于来自两个单独表的相关记录的只读表单吗?没试过,但我认为你可以做SQLFORM.factory(db.table1, db.table2, record=myrecord, readonly=True)。您必须创建“myrecord”对象,以便它包含两个表中的所有字段。
猜你喜欢
  • 2012-07-10
  • 2014-02-09
  • 2010-10-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多