Python web2py-SQLFORM中的动态更新字段
使用本书中多对多关系示例中的一个示例:Python web2py-SQLFORM中的动态更新字段,python,web2py,Python,Web2py,使用本书中多对多关系示例中的一个示例: db = DAL("sqlites://storage.sqlite") db.define_table('persons', Field('name')) db.define_table('things', Field('name')) db.define_table('ownership', Field('person', 'r
db = DAL("sqlites://storage.sqlite")
db.define_table('persons',
Field('name'))
db.define_table('things',
Field('name'))
db.define_table('ownership',
Field('person', 'reference persons'),
Field('thing', 'reference things'))
我还有一张桌子:
db.define_table('usages',
Field('person', 'reference person',requires = IS_IN_DB(db, db.person.id, '%(name)s'),
Field('thing', 'reference thing'),
Field('usage'))
对于表格的使用,我想为person和thing字段都提供下拉菜单,因此使用requires。。。。。
然而,我想有下拉菜单,从东西到变化,根据个人的选择,以限制选择的东西,一个人拥有。
我考虑过使用requires,就像使用下拉菜单一样,但是我不能在requires=IS_in_db中使用db.usages.person。。。因为没有创建条目,因此它会引发异常
我尝试的是:
requires=IS_IN_DBdb,DBdb.usages.person==db.persons.id&db.persons.id==db.ownership.person&db.ownership.person==db.things.name
使用requires=IS_IN_DBdb,db.things.id,“%names”为thing提供了一个下拉菜单,但它列出了所有这些内容,而不考虑亲自选择
有没有办法解决这个问题 做你想做的事没有内置的方法。您将需要使用Javascript来检测何时在person字段中进行了选择,并向服务器发出Ajax请求以获取thing select元素的选项列表 对于一些示例,请访问web2pyslices站点,也可以查看 此外,关于您的代码:
requires = IS_IN_DB(db, db((db.usages.person == db.persons.id) &(db.persons.id == db.ownership.person) &(db.ownership.person == db.things.name)))
注意,IS_IN_DB的第二个参数必须是字段对象或字段名,而不是DAL集合对象。如果您想通过过滤器限制选项集,第一个参数可以是set对象,但正如所述,这在这种情况下没有帮助,因为在浏览器中进行选择之前,您不知道过滤器标准是什么。非常感谢您提供的信息反馈。我必须承认,我有点失望,我希望有一个明显的答案,我逃避。到现在为止,我从未使用过Javascript,我想是时候深入研究了。我添加了一些示例的链接和一个可能适合您的小部件插件。谢谢,我会尝试一下。