我正在使用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
答案 0 :(得分:0)
不是给每个comments
输入指定相同的名称,而是使名称唯一,包括作为名称一部分的记录ID:
INPUT(_type="text", _name="comments_%s" % eid.id)
然后您将拥有form.vars.comments_1
,form.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也是如此。