2016-04-02 5 views
1

Ich habe mehrere Elemente in einer Form mit Flask WTF mit dieser Namenskonvention ...Wie kann ich eine Zeichenfolge verwenden, um auf ein verschachteltes Attribut aus einem Formular zuzugreifen?

# req_app_qty 
# req_app_note 
# req_main_qty 
# req_main_note 
# req_side_qty 
# req_side_note 
# req_bread_qty 
# req_bread_note 
# continued... 

ich die Formulardaten wie dies manuell zugreifen kann ...

print "Manually (qty): " , form.req_app_qty.data  # works fine 
print "Manually (note): " , form.req_app_note.data # works fine 

Aber ich versuche zu Zum Zugriff auf diese Formulardaten in einer automatisierten Art und Weise ...

categories = [ "app", "main", "side", "bread", "dessert", "bev", "uten", "cups", "misc"] 
for x in categories: 
    field1 = "req_%s_qty.data" % x # create a string to represent the attributes 
    field2 = "req_%s_note.data" % x # create a string to represent the attributes 
    qty_rqst = form.field1.data   # fails 
    rqst_note = form.field2.data   # fails 

    # also tried   
    print "QTY=", getattr(form, field1) # fails 
    print "Note:", getattr(form, field2) # fails 

habe ich versucht, diese Methoden oben, und sie haben es versäumt, ...

Erste Methode, die die Zeilen mit einem Fehler fehlschlagen, der besagt, dass das Formular ein Attribut "field1" oder "field2" nicht aufweist.

Wie für die zweite Methode der Formulardaten zugreifen, die folgenden Zeilen nicht mit einem Fehler, der besagt es gibt kein Attribut ‚req_app_qty.data‘

print "QTY=", getattr(form, field1) # fails 

Wie kann ich eine Zeichenfolge erstellen, um diese Form Attribute zugreifen?

Antwort

0
qty_rqst = form.field1.data   # fails 

Das funktioniert nicht, weil Sie das Feld zugreifen möchten field1, die es nicht gibt.

print "QTY=", getattr(form, field1) # fails 

Das funktioniert nicht, weil Sie das Feld zugreifen möchten req_X_qty.data, die es nicht gibt.

Sie müssen auf Felder zugreifen, die vorhanden sind, z.

print 'QTY=', getattr(form, 'req_app_qty').data 
+0

Basierend auf Ihrer Antwort, habe ich die folgenden Änderungen das Problem .. für x in Kategorien zu beheben: field1 = "REQ_% s_qty" % x # erstellen eine Zeichenfolge, die Attribute field2 = "zu vertreten req_% s_note "% x # Erzeuge eine Zeichenkette zur Darstellung der Attribute qty_rqst = getattr (Formular, Feld1) .data # funktioniert jetzt rqst_note = getattr (Formular, Feld2) .data # funktioniert jetzt – marvcode

Verwandte Themen