diff --git a/the_works/templates/views/werk_read.html b/the_works/templates/views/werk_read.html new file mode 100644 index 0000000..b9dcb53 --- /dev/null +++ b/the_works/templates/views/werk_read.html @@ -0,0 +1,51 @@ +{% extends 'base.html' %} + +{% block title %}"{{ werk["Titel"] }}" – Detailansicht"{% endblock title %} + +{% block heading %}"{{ werk["Titel"] }}" – Detailansicht{% endblock heading %} + +{% block content %} +{% set ID = werk["id"] %} +
+
+
+ + + + + + +
+
+
+{% endblock content %} diff --git a/the_works/views/werk.py b/the_works/views/werk.py index 8650e8b..820be27 100644 --- a/the_works/views/werk.py +++ b/the_works/views/werk.py @@ -5,19 +5,16 @@ from the_works.models import Werk, Reihe, Verlag, Werksform bp = Blueprint("werk", __name__) +# ORM equivalent of SQL statement to select all Werk entries +read_statement = select(Werk, Reihe, Verlag, Werksform).join(Werk.reihe, isouter=True).join(Werk.verlag, isouter=True).join(Werk.werksform, isouter=True) + + @bp.route("/werk") @bp.route("/werk/all") def all(): - # build ORM equivalent of SELECT statement - stmt = ( - select(Werk, Reihe, Verlag, Werksform) - .join(Werk.reihe, isouter=True) - .join(Werk.verlag, isouter=True) - .join(Werk.werksform, isouter=True) - ) # condense result into list of dicts werke = [] - for row in db.session.execute(stmt): + for row in db.session.execute(read_statement): werke.append({ "id": row.Werk.ID, "Titel": row.Werk.Titel, @@ -30,9 +27,21 @@ def all(): @bp.route("/werk/read/") -def read(): - werk = db.session.get(Werk, id) - return render_template("views/werk_read.html", werk=werk) +def read(id): + row = db.session.execute(read_statement.where(Werk.ID == id)).one() + werk = { + "id": row.Werk.ID, + "Titel": row.Werk.Titel, + "Untertitel": row.Werk.Untertitel or "", + "Reihe": row.Reihe.Titel if row.Reihe else "", + "r_id": row.Reihe.ID if row.Reihe else "", + "Verlag": row.Verlag.Verlag if row.Verlag else "", + "v_id": row.Verlag.ID if row.Verlag else "", + "Werksform": row.Werksform.Werksform if row.Werksform else "", + "wf_id": row.Werksform.ID if row.Werksform else "", + "Reihennummer": row.Werk.Reihennummer or "", + } + return render_template("views/werk_read.html", werk=werk, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform))) @bp.route("/werk/create", methods=["POST"]) def create():