diff --git a/the_works/templates/views/texte.html b/the_works/templates/views/texte.html index ceadc19..d16c8d6 100644 --- a/the_works/templates/views/texte.html +++ b/the_works/templates/views/texte.html @@ -5,6 +5,8 @@ {% block heading %}Texte{% endblock heading %} {% block content %} + +{% include "_icons.svg" %}
@@ -22,64 +24,79 @@ - {% for row in rows %} - - {{ row.Texte.Titel }} - {{ row.Texte.Untertitel }} - {{ row.Reihen.Reihentitel }} - {{ row.Textformen.Textform }} - {{ row.Sprachen.Sprache }} - edit - delete + {% for text in texte %} + + {{ text["titel"] }} + {{ text["untertitel"] }} + {{ text["reihe"] }} + {{ text["textform"] }} + {{ text["sprache"] }} + + {% endfor %}
- -
-
- -

Neuer Text

-
-
- - - - - - - -
-
-
+ +
+
+ +

Neuer Text

+
+
+ + + + + + + +
+
+
+ + {% endblock content %} \ No newline at end of file diff --git a/the_works/views.py b/the_works/views.py index 9d4df91..e531e0f 100644 --- a/the_works/views.py +++ b/the_works/views.py @@ -1,7 +1,7 @@ from flask import Blueprint, render_template, request, redirect, flash, url_for from the_works.database import db from the_works.models import Texte, Reihen, Sprachen, Textformen -from sqlalchemy import select +from sqlalchemy import select, update, insert, delete bp = Blueprint("views", __name__) @@ -11,39 +11,60 @@ def home(): @bp.route("/texte") def texte_show(): + # build ORM equivalent of SELECT statement stmt = ( select(Texte, Reihen, Textformen, Sprachen) .join(Texte.textform, isouter=True) .join(Texte.reihe, isouter=True) .join(Texte.sprache, isouter=True) ) - return render_template("views/texte.html", rows=db.session.execute(stmt), reihen=db.session.scalars(select(Reihen)), textformen=db.session.scalars(select(Textformen)), sprachen=db.session.scalars(select(Sprachen))) + # condense result into list of dicts + texte = [] + for row in db.session.execute(stmt): + texte.append({ + "id": row.Texte.ID, + "titel": row.Texte.Titel, + "untertitel": row.Texte.Untertitel or "", + "reihe": row.Reihen.Reihentitel if row.Reihen else "", + "r_id": str(row.Reihen.ID) if row.Reihen else "", + "textform": row.Textformen.Textform if row.Textformen else "", + "tf_id": str(row.Textformen.ID) if row.Textformen else "", + "sprache": row.Sprachen.Sprache, + "s_id": str(row.Sprachen.ID) if row.Sprachen else "" + }) + return render_template("views/texte.html", texte=texte, reihen=db.session.scalars(select(Reihen)), textformen=db.session.scalars(select(Textformen)), sprachen=db.session.scalars(select(Sprachen))) @bp.route("/texte/create", methods=["POST"]) def text_create(): - db = get_db() - try: - db.execute( - "INSERT INTO texte (Titel, Untertitel, Reihe, Textform, Originalsprache) VALUES (?, ?, ?, ?, ?)", - ( - request.form["text_titel"], - request.form["text_untertitel"] or None, - request.form["text_reihe"] or None, - request.form["text_textform"], - request.form["text_sprache"] - ) - ) - db.commit() - flash("Neuen Text in Datenbank eingetragen") - except: - flash("Fehler beim Eintragen in die Datenbank", "error") - + stmt = insert(Texte).values(form_to_dict(request.form)) + db.session.execute(stmt) + db.session.commit() + flash("Eintrag erfolgreich hinzugefügt") return redirect(url_for("views.texte_show")) -@bp.route("/texte/update/") -def text_update(): - pass +@bp.route("/texte/update/", methods=["POST"]) +def text_update(id): + stmt = update(Texte).where(Texte.ID == id).values(form_to_dict(request.form)) + db.session.execute(stmt) + db.session.commit() + flash("Eintrag erfolgreich geändert") + return redirect(url_for("views.texte_show")) + @bp.route("/texte/delete/") -def text_delete(): - pass +def text_delete(id): + stmt = delete(Texte).where(Texte.ID == id) + db.session.execute(stmt) + db.session.commit() + flash("Eintrag erfolgreich gelöscht") + return redirect(url_for("views.texte_show")) + + +def form_to_dict(form): + return { + "Titel": form["text_titel"], + "Untertitel": form["text_untertitel"] or None, + "Reihe": form["text_reihe"] or None, + "Textform": form["text_textform"], + "Originalsprache": form["text_sprache"] + }