【问题标题】:Generate a nested CRUD form生成嵌套的 CRUD 表单
【发布时间】:2012-05-22 01:48:09
【问题描述】:

从逻辑的角度来看,有时它是没有意义的,例如,在添加客户之前添加地址。

db.define_table('address',
   Field('line1','string', required=True),
   Field('line2','string'),
   Field('suburb','string', required=True),
   Field('post_code','integer'),
   Field('email','string')
)

db.address.post_code.requires = IS_INT_IN_RANGE(0000, 9999)
db.address.email.requires     = IS_EMAIL()

db.define_table('customer',
   Field('name', 'string', required=True, unique=True),
   Field('locations', 'list:reference db.address', required=True),
   Field('comment', 'string')
) # quick aside: how would I ensure there isn't another customer with same name+location?

db.address.requires = IS_IN_DB(db, db.address, '%(line1)s' + ', ' + '%(suburb)s', multiple=True)

因此,如果我可以生成一个允许您创建客户的表单,并附上地址,那么管理将变得更加合乎逻辑。

然而,能够从数据库中已经存在的记录中进行选择仍然很有用,但只有一个“添加”按钮——使用 javascript 向下滚动——如果字段为空(并且 .requires 不是是)。

我将如何生成这个嵌套的 CRUD?

感谢所有建议

【问题讨论】:

    标签: data-access-layer crud nested-forms web2py abstraction


    【解决方案1】:

    我相信官方书中的这个主题在某种程度上涵盖了它:

    http://web2py.com/books/default/chapter/29/7#One-form-for-multiple-tables

    基本上,您必须使用 sqlform.factory。您的控制器将首先调用地址上的插入,然后获取地址的 ID,然后使用该 ID 调用客户上的插入。

    不幸的是,它处理您的添加,但不是下拉列表。就这一点而言,您需要编写自己的 html。没有自动 CRUD。

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 1970-01-01
      • 2020-06-06
      • 2015-08-24
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多