Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python web2py-SQLFORM中的动态更新字段_Python_Web2py - Fatal编程技术网

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,我想是时候深入研究了。我添加了一些示例的链接和一个可能适合您的小部件插件。谢谢,我会尝试一下。