使用SQLFORM.factory为行生成类

时间:2014-04-16 13:00:27

标签: web2py

我想使用SQLFORM.factory从多个表生成表单,并且我喜欢中的行 要使用与生成它们的表对应的类来标记的表单。例如:

SQLFORM.factory(db.table1, db.table2)

以及生成类的附带代码应该生成如下内容:

...
<tbody>
    <tr id = 'no_table_field1__row' class = 'table1_field'></tr>
    <tr id = 'no_table_field2__row' class = 'table1_field'></tr>
    <tr id = 'no_table_field1__row' class = 'table2_field'></tr>
    <tr id = 'no_table_field2__row' class = 'table2_field'></tr>
</tbody>
...

默认情况下,SQLFORM.factory生成的ID似乎以&#34; no_table _&#34;开头。

是否有一种快速简便的方法来生成类,或者至少让自动生成的id名称与表名相对应?谢谢。

1 个答案:

答案 0 :(得分:0)

使用SQLFORM.factory进行操作并不是一种简单的方法。你可以改变&#34; no_table&#34;通过table_name参数获取其他内容,但这会影响所有表单输入字段。如果您想使用SQLFORM.factory(而不是生成自定义表单),那么您必须在创建表单对象后使用server-side DOM来操作它。类似的东西:

form = SQLFORM.factory(db.table1, db.table2)
for f in [f for f in db.table1] + [f for f in db.table2]:
    if f.type != 'id' and f.readable and f.writable:
        form.element('tr[id=no_table_%s__row]' % f.name).add_class(
            '%s_%s' % (f.tablename, f.name))

以上内容遍历两个表中的所有Field个对象,对于每个表,它会根据TR在表单中找到关联的id元素,然后添加一个类TR