web2py中SQLFORM.factory的条件字段

时间:2015-03-07 15:38:58

标签: python 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无效,因为它是一个查询,而我实际上并没有使用表.​​..但我没有表,这就是为什么我正在使用{ {1}}。关于如何在这种情况下使字段成为条件的任何建议?

1 个答案:

答案 0 :(得分:3)

好的我明白了。

如果您检查SQLFORM.factory表单上的网页来源,您会发现所提供的ID为"no_table_field1""no_table_field2"。所以,窃取从JQuery&中借用代码。在web2py书的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>

它工作得很漂亮。 (不是平滑过渡,但它有效。)