web2py 中 SQLFORM.factory 的条件字段
Conditional fields for a SQLFORM.factory in web2py
假设我使用 SQLFORM.factory
构造一个表单,如下所示:
my_fields = [Field('field1', default='some value'),
Field('field2', default = 'some other value')]
form = SQLFORM.factory(*my_fields)
现在我希望 field2
仅在 field
等于某个值时显示。但是,当我尝试做类似的事情时:
my_fields[1].show_if = my_fields[0] == 'some value'
(在我实际制造工厂之前)我得到:
File "/Applications/web2py.app/Contents/Resources/gluon/packages/dal/pydal/objects.py", line 1202, in __eq__
return Query(db, db._adapter.EQ, self, value)
AttributeError: 'NoneType' object has no attribute '_adapter'
我的猜测是 show_if
不起作用,因为它是一个查询,我实际上并没有使用 table...但是我没有 table,这就是我使用 SQLFORM.factory
的原因。关于如何在这种情况下使字段有条件的任何建议?
好的,我明白了。
如果您检查 SQLFORM.factory
表单上的页面源,您会注意到给定的 ID 是 "no_table_field1"
和 "no_table_field2"
。所以,窃取借用web2py书JQuery & Ajax章节的代码,我在相关视图的末尾添加:
<script>
jQuery(document).ready(function(){
if(jQuery('#no_table_field1').prop('value') == 'some value')
jQuery('#no_table_field2__row').show();
else jQuery('#no_table_field2__row').hide();
jQuery('#no_table_field1').change(function(){
if(jQuery('#no_table_field1').prop('value') == 'some value')
jQuery('#no_table_field2__row').show();
else jQuery('#no_table_field2__row').hide();});
});
</script>
而且效果很好。 (不是一个平稳的过渡,但它有效。)
假设我使用 SQLFORM.factory
构造一个表单,如下所示:
my_fields = [Field('field1', default='some value'),
Field('field2', default = 'some other value')]
form = SQLFORM.factory(*my_fields)
现在我希望 field2
仅在 field
等于某个值时显示。但是,当我尝试做类似的事情时:
my_fields[1].show_if = my_fields[0] == 'some value'
(在我实际制造工厂之前)我得到:
File "/Applications/web2py.app/Contents/Resources/gluon/packages/dal/pydal/objects.py", line 1202, in __eq__
return Query(db, db._adapter.EQ, self, value)
AttributeError: 'NoneType' object has no attribute '_adapter'
我的猜测是 show_if
不起作用,因为它是一个查询,我实际上并没有使用 table...但是我没有 table,这就是我使用 SQLFORM.factory
的原因。关于如何在这种情况下使字段有条件的任何建议?
好的,我明白了。
如果您检查 SQLFORM.factory
表单上的页面源,您会注意到给定的 ID 是 "no_table_field1"
和 "no_table_field2"
。所以,窃取借用web2py书JQuery & Ajax章节的代码,我在相关视图的末尾添加:
<script>
jQuery(document).ready(function(){
if(jQuery('#no_table_field1').prop('value') == 'some value')
jQuery('#no_table_field2__row').show();
else jQuery('#no_table_field2__row').hide();
jQuery('#no_table_field1').change(function(){
if(jQuery('#no_table_field1').prop('value') == 'some value')
jQuery('#no_table_field2__row').show();
else jQuery('#no_table_field2__row').hide();});
});
</script>
而且效果很好。 (不是一个平稳的过渡,但它有效。)