生成嵌套的CRUD表单

时间:2012-05-14 14:48:50

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

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

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按钮滚动 - 如果字段为空(默认情况下为。)将默认打开。

如何生成此嵌套CRUD?

感谢所有建议

1 个答案:

答案 0 :(得分:0)

我相信官方书中的这个主题有点涵盖:

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

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

遗憾的是,它会处理您的添加,但不会处理下拉列表。就这个问题而言,您需要编写自己的html。没有自动CRUD。