2016-06-30 29 views
0

In einem Controller in Web2Py versuche ich ein Dropdown in einem Formular mit den Ergebnissen einer Abfrage zu füllen. Wenn der Benutzer das Formular sendet, möchte ich den Wert anstelle des Optionsnamens extrahieren. Ich kann den Optionswert einfach nicht in der Dropdownliste erscheinen lassen.Web2py SELECT Option Wert

Ich habe diese Anfrage:

course_list = external_db.executesql("SELECT course_id, course_title FROM course ORDER BY course_id") 

und ich habe diese Tabellenzeile:

form=FORM(TABLE(TR('course list: ' , SELECT(course_list, _name='courses', requires=IS_IN_SET(course_list, course_list_id, zero='- choose -'))), 

aber ich kann nicht einen Weg, nur immer den Wert wieder aus der Option Dropdown finden, eher als der Optionsname.

Antwort

0

@dido die richtige Idee hat. course_list ist eine Liste von (value, label) Tupeln, so dass Sie nicht einfach direkt an SELECT übergeben werden können, um das gewünschte Ergebnis zu erhalten. Eine weitere Möglichkeit ist es, die Form zu konstruieren SQLFORM.factory verwenden, die oft einfacher, als den Aufbau einer benutzerdefinierten Formular manuell über die FORM Helfer:

form = SQLFORM.factory(Field('courses', 'integer', 
          requires=IS_IN_SET(course_list, zero='- choose -'))) 

Die oben wird automatisch die SELECT mit den Kurstitel als Etiketten generieren und den Kurs-IDs als Werte.

+0

das sortierte es, vielen Dank, ich bin wirklich dankbar. –

0

Ich glaube nicht, dass Sie dort IS_IN_SET verwenden können, um das Dropdown zu füllen. Verwenden Sie stattdessen OPTION Helfer und Schleife über jedes Tupel aus der Abfrage zurückgegeben, sie zu füllen:

options = [OPTION(course[1], _value=course[0]) for course in course_list] 
form=FORM(TABLE(TR('course list: ', SELECT(options, _name='courses')))) 

On einreichen den Auswahlwert von form.vars.courses abrufen

+0

Oder mit Tupel Entpacken: '[OPTION (Label, _value = Wert) für Wert, Label in Kursliste]'. – Anthony

+0

Vielen Dank für die Antwort dido, das ist brilliant. Ich hatte nicht daran gedacht, den OPTION-Helfer anzuschauen. Die einzige Sache ist jetzt, dass ich einen Fehler (Tupelindex außerhalb des Bereichs) bekomme, um zu versuchen, auf Kurs [0] und Kurs [1] zuzugreifen, obwohl die Course_id [0] und der Course_title [1] –

+0

sein sollte First of Stuart, wende Anthonys Rat an und benutze Tupel-Entpacken, es ist deutlich besser und einfacher zu lesen. – dido