web2py:自定义form.vars以传递输入id

时间:2018-04-01 22:25:23

标签: forms django-forms customization web2py

我正在使用web2py为员工建立一个Web应用程序。

这是模型中的db

db.define_table(
    'employee',
     Field('name'),
     format = '%(name)s'
)
db.define_table(
    'attendance',
    Field('employee_id',db.employee),
    Field('attend','boolean'),
    Field('comments','text')
)

这是控制器:

employeeIDS=db(db.employee).select(db.employee.ALL)
table=[]
for eid in employeeIDS:  
table.append([eid.name,INPUT(_type="checkbox",_name=eid.id,_id=eid.id),INPUT(_type="text",_name="comments",_id=eid.id)])

form=FORM( TABLE(TR("employee name","attended?","comments"),*[TR(*rows) for rows in table]),INPUT(_type="submit",_value="SUBMIT"))    
if form.accepts(request,session):
     response.flash="form accepted"
     print(request.vars)
elif form.errors:
     response.flash="form is invalid"
else:
     response.flash="please fill the form"

return dict(form=form,vars=form.vars)

我的问题是:
如何访问每行中出席和评论字段的ID以将这些字段与相关员工相关联。因此,当我将form.vars插入考勤表时,我保证每个员工都会记录为出勤或缺席,并且相关评论也会被插入。

Thanx

2 个答案:

答案 0 :(得分:0)

不是给每个comments输入指定相同的名称,而是使名称唯一,包括作为名称一部分的记录ID:

INPUT(_type="text", _name="comments_%s" % eid.id)

然后您将拥有form.vars.comments_1form.vars.comments_2

另外,请注意HTML id属性应该是唯一的,但您使用值eid.id作为复选框输入和注释输入的id属性。< / p>

答案 1 :(得分:0)

我认为更好的选择是使用SQLFROM代替FORM。

在那里你可以customize the resulting form in the view使你想要的布局正确,即使你已经使用了表格的HTML助手。

请查看signature of the SQLFORM - 它提供了很多选项作为标签或showid(链接后只需向下滚动一点)。

要排除在SQLFORM使用中更改或甚至显示的字段:

db.my_table.a_field.writable = False
db.my_table.a_field.readable = False

here所述 - 对于SQLFORMS也是如此。