说我使用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无法使用,因为它是一个查询,并且我实际上没有使用表格...但是我没有表格,这就是为什么我使用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>


而且效果很好。 (这不是一个平稳的过渡,但是可以。)

关于python - web2py中SQLFORM.factory的条件字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28916575/

10-12 16:47