Flask - Zwei Forms verbinden

Django, Flask, Bottle, WSGI, CGI…
Antworten
jdon2k
User
Beiträge: 4
Registriert: Sonntag 7. Februar 2021, 13:10

Hallo zusammen,

ich möchte gerne zwei Forms "verbinden", in dem SelectionField möchte ich mir eine Option auswählen und mir die Details abrufen. Die Details sollen dann in mehreren Input Feldern geschrieben werden, wo ich die Details editieren und speichern kann. Bei mir hakt es aktuell daran, wie ich die Details in die Input Felder bekomme.

forms.py

Code: Alles auswählen

class Form1(FlaskForm):
    select = SelectField('Test', choices=[], coerce=str)
    submit = SubmitField('Get Data')

class Form2(FlaskForm):
    field1 = StringField('field1', validators=[DataRequired()])
    submit = SubmitField('Save')
app.py

Code: Alles auswählen

@app.route("/", methods=['GET', 'POST'])
def index():
    test = ["1", "2", "3"]
    form1 = Form1()
    form1.select.choices = test
    form2 = Form2()
    if request.method == 'POST':
        if form1.select.data:
            
            print(form1.select.data) # Wird gegen eine SQL Abfrage getauscht

            # Hier sollten dann die Input Felder mit den Details gefüttert werden

            # Redirect? Oder ist es möglich as ganze ohne Reload der Seite zu bewerkstelligen?

    return render_template('index.html', form1=form1, form2=form2)
index.html

Code: Alles auswählen

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <form action="" method="post">
        {{ form1.select(size="30") }}
        {{ form1.submit }}
    </form>

    <form action="" method="post">
        {{ form2.field1.label }}
        {{ form2.field1 }}
        {{ form2.submit }}
    </form>
    
</body>
</html>
Freue mich über jede Hilfe :)

Danke & Gruß
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@jdon2k,

wenn ich dich richtig verstehe, möchtest du erst nachdem der Benutzer in Form1 eine Auswahlgetroffen hat, basierend auf dieser Auswahl, die Datenbank abfragen und die entsprechenden weiteren Auswahlmöglichkeiten in Form2 anzeigen.
Du könntest das wahrscheinlich erreichen indem du das Problem auf zwei HTML Seiten aufteilst. Auf der ersten Seite findet die erste Auswahl in Form1 statt. Beim submit wird dann eine zweite Seite mit Form2 und den entsprechenden Daten aus der Datenbank zurückgegeben. Da kann die endgültige Auswahl gemacht werden.

Schöner wäre es aber wenn über ein AJAX request, ausgehend von der Auswahl in in Form1 die Daten aus der Datenbank im Hintergrund nachgeladen und in Form2 eingefügt würden.
https://flask.palletsprojects.com/en/2. ... ns/jquery/
jdon2k
User
Beiträge: 4
Registriert: Sonntag 7. Februar 2021, 13:10

@rogerb

vielen Dank, ich habe mich mal etwas eingelesen und es funktioniert wie gewollt :)
Antworten