从逻辑角度来看,有时候没有意义,例如,在添加客户之前添加地址。
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?
感谢所有建议
答案 0 :(得分:0)
我相信官方书中的这个主题有点涵盖:
http://web2py.com/books/default/chapter/29/7#One-form-for-multiple-tables
基本上,你必须使用sqlform.factory。您的控制器将首先调用地址上的插入,然后获取该地址的ID,然后使用该ID,调用客户的插入。
遗憾的是,它会处理您的添加,但不会处理下拉列表。就这个问题而言,您需要编写自己的html。没有自动CRUD。