2016-08-21 5 views
0

In meiner web2py-Anwendung habe ich in der Steuerung von einer externen DB die Namen von Schülern gelesen, für die ich mich registrieren möchte. Ich durchlaufe die resultierende Liste und füge die Listenelemente zu einer neuen Liste hinzu.Hinzufügen von Spalten zu einer Web2py-Tabelle in einem Formular

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

Dann für jeden Schüler las ich ihre Teilnahme-Codes für den Tag so weit von einem anderen Tisch, und hängen Sie sie an attendance_list:

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

Jetzt bin ich ein Formular wollen, gehen machen Aus diesem Grund verwenden Sie eine Tabelle, in der der Anwesenheitscode jeder Schülerin in einer Texteingabe angezeigt wird (damit sie im Falle eines Fehlers aktualisiert werden können), und dann ein Dropdown-Feld für die Eingabe des aktuellen Unterrichtscodes.

ich eine Form und TABLE Helfer bin mit der Tabelle in Form zu erstellen:

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

kann aber nicht in der Lage sein scheinen, wie eine neue ‚Reihe‘ Formularelement mit etwas hinzufügen:

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

Dabei ist main_reg_list ein Wörterbuch für zulässige Anwesenheitscodes (oder natürlich jedes andere Formulareingabeelement).

Zusammenfassend, ich bin stecken stecken neue TDs zu einer Tabelle mit einem TABLE-Helfer aus einer Liste von Listen. Ich wette, ich bin nicht die erste Person, die dieses Problem überwunden hat.

+0

Kannst du ein Beispiel für den Inhalt von Anwesenheitsliste, Anwesenheitscode oder Hauptverzeichnis geben? Ich bekomme nicht das, was Sie genau in Form wollen. Ein Beispiel kann hilfreich sein. –

+0

Danke für die Beantwortung von @Gaurav, also Anwesenheitsliste ist eine Liste von Listen mit bestehenden Anwesenheitscodes für Studenten, wie: [[Vorname, Nachname, Anwesenheitscode_1 ... Anwesenheitscode_n]]. Ein Anwesenheitscode könnte '/', 'N', '3' usw. sein, nur ein Code, der ihre Anwesenheit für den bisherigen Tag darstellt. Reg_main_list wäre ein Wörterbuch möglicher Anwesenheitscodes. Die Idee ist, dass ich eine Tabelle der Studenten, ihre Anwesenheitscodes für den bisherigen Tag, möchte, gefolgt von einem SELECT-Formular-Element, so dass der Lehrer einen Code für die aktuelle Lektion auswählen kann. Wie: 'sid', 'snail', '/', '4', '3', '5', '/' + Dropdown für diese Lektion –

Antwort

0

Ich bin immer noch nicht klar, was Sie wollen. Ich denke, Sie wollen Tabelle von Studenteninformationen und in einer Spalte möchten Sie Dropdown. Etwas similat zu folgenden Bild

enter image description here

Above Form wird aus folgendem Code erstellt. Ich hoffe folgenden Code wird Ihnen helfen:

# 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}} 

Sind meine Annahmen richtig? oder willst du noch etwas anderes? Kommentar wenn Code nicht verstanden wurde.

+0

Hallo Gaurav, das ist ziemlich genau das, was ich versuche, danke so sehr. Ich füge während des Tages für jeden Unterricht zusätzliche Anwesenheitscodes hinzu. Ich werde das später versuchen und Sie wissen lassen. Vielen Dank. –

+0

Hallo Gaurav, ich probiere diesen Code aus. Im Laufe des Tages möchte ich, dass jede Zeile (in td_list) jeden der zuvor aufgezeichneten Codes enthält, sodass Sie etwas wie "Henry", "Hedgehog", "/", "4", "3" haben ',' 5 ','/', das heißt, ich müsste der Liste ein neues TD (lesson_grade) hinzufügen. Ich kann sie anhängen, aber ich möchte, dass sie als neue TD-Elemente behandelt werden und nicht nur auf dem Bildschirm als "TD (Anwesenheitscode)" erscheinen, ist das so einfach wie das? –

+0

Gaurav, es hat funktioniert! Ich kann neue Formularelemente dynamisch zur Zeile hinzufügen. Ohne dich hätte ich es nicht geschafft! Vielen Dank. –

Verwandte Themen