在表单中向 Web2py table 添加列

Adding columns to a Web2py table in a form

在我的 web2py 应用程序中,我在控制器中从外部数据库中读取了我想要注册的学生的姓名。我遍历结果列表,将列表元素添加到新列表中。

for student in pupils_query:
    attendance_list.insert(counter, [student[0], student[1], student[2], student[3]])
    counter += 1
counter = 0

然后,对于每个学生,我从另一个 table 读取他们当天的出勤代码,并将它们附加到 attendance_list:

for attendance_code in attendance_result:
        attendance_list[counter].append(attendance_code)

现在,我想使用 table 将所有这些制作成一个表格,它将在文本输入中显示每个学生的出勤代码(如果错误可以更新),然后有一个用于输入当前课程代码的下拉列表。

我正在使用 FORM 和 TABLE 帮助器以以下形式创建 table:

form=FORM(TABLE(*[TR(*rows) for rows in attendance_list]))

但似乎无法添加新的 'row' 表单项,例如:

            select = "SELECT("+ main_reg_list +")"
            attendance_list[counter].append(select)

其中 main_reg_list 是 acceptable 考勤代码(当然,任何其他表单输入元素)的字典。

总而言之,我一直在将新的 TD 添加到 table 中,该 table 使用列表列表中的 TABLE 助手制作。我打赌我不是第一个克服这个问题的人。

我还不清楚你想要什么。我想你想要 table 的学生信息,并且在一栏中你想要下拉列表。类似于下图

以上表格是根据以下代码创建的。 希望以下代码对您有所帮助:

# controller/default.py

def index():
    # Dummy attendance list, list after appending attendance code
    attendance_list = [['stud_id_1', 'first_name_1', 'last_name_1', 'attendance_code_1'],
                       ['stud_id_2', 'first_name_2', 'last_name_2', 'attendance_code_2'],
                       ['stud_id_3', 'first_name_3', 'last_name_3', 'attendance_code_5'],
                       ['stud_id_4', 'first_name_4', 'last_name_4', 'attendance_code_4']]

    possible_att_code = ['attendance_code_1', 'attendance_code_2', 'attendance_code_3', 'attendance_code_4', 'attendance_code_5']

    # initialise form_rows with Table heading
    form_rows = [THEAD(TR(TH('ID'), TH('First Name'), TH('Last Name'), TH('Attendence Code')))]

    for attendance in attendance_list:
        attendance_code_dropdown = _get_dropdown(attendance[0], attendance[3], possible_att_code)

        td_list = [TD(attendance[0]), TD(attendance[1]), TD(attendance[2]),
                   TD(attendance_code_dropdown)]
        table_row = TR(td_list, _id='row_' + attendance[0])
        form_rows.append(table_row)

    # Form submit button
    form_rows.append(TR(INPUT(_type='submit')))
    form = FORM(TABLE(*form_rows), _name='student_attendance',
                _id='student_attendance')

    if form.accepts(request, session):
        # Write code to update record
        pass
    return dict(form=form)


def _get_dropdown(stud_id, att_code, possible_att_code):

    option_list = []
    for pac in possible_att_code:
        if pac == att_code:
            option_list.append(OPTION(pac, _value=pac, _selected='selected'))
        else:
            option_list.append(OPTION(pac, _value=pac))

    return SELECT(*option_list, _name=stud_id)

<!-- views/default/index.html -->
{{extend 'layout.html'}}

{{=form}}

我的假设是否正确?或者你想要别的东西吗?如果不理解代码,请评论。