From 03cd3f47673601f49430f1393924a3d177fdb54d Mon Sep 17 00:00:00 2001 From: eclipse Date: Wed, 23 Apr 2025 09:36:59 +0200 Subject: [PATCH] added first view for table "Werk" --- the_works/__init__.py | 3 +- the_works/models.py | 28 +++++++-- the_works/templates/_nav.html | 1 + the_works/templates/views/werk.html | 92 +++++++++++++++++++++++++++++ the_works/views/werk.py | 72 ++++++++++++++++++++++ 5 files changed, 189 insertions(+), 7 deletions(-) create mode 100644 the_works/templates/views/werk.html create mode 100644 the_works/views/werk.py diff --git a/the_works/__init__.py b/the_works/__init__.py index 6d1dd6f..034e4bd 100644 --- a/the_works/__init__.py +++ b/the_works/__init__.py @@ -26,9 +26,10 @@ def create_app(): init_db(app) # register blueprints - from the_works.views import home, text + from the_works.views import home, text, werk app.register_blueprint(text.bp) app.register_blueprint(home.bp) + app.register_blueprint(werk.bp) # load debug toolbar toolbar = DebugToolbarExtension(app) diff --git a/the_works/models.py b/the_works/models.py index 3fbbd13..ac4e416 100644 --- a/the_works/models.py +++ b/the_works/models.py @@ -3,25 +3,41 @@ from sqlalchemy.orm import relationship class Text(db.Model): __table__ = db.Model.metadata.tables['Text'] - reihe = relationship("Reihe", back_populates="texte") - textform = relationship("Textform", back_populates="texte") - sprache = relationship("Sprache", back_populates="texte") + reihe = relationship("Reihe", back_populates="text") + textform = relationship("Textform", back_populates="text") + sprache = relationship("Sprache", back_populates="text") def __repr__(self): return f"Text(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Reihe={self.Reihe})" class Werk(db.Model): __table__ = db.Model.metadata.tables['Werk'] + reihe = relationship("Reihe", back_populates="werk") + verlag = relationship("Verlag", back_populates="werk") + werksform = relationship("Werksform", back_populates="werk") + + def __repr__(self): + return f"Werk(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Erscheinungsdatum={self.Erscheinungsdatum})" class Reihe(db.Model): __table__ = db.Model.metadata.tables['Reihe'] - texte = relationship("Text", back_populates="reihe") + text = relationship("Text", back_populates="reihe") + werk = relationship("Werk", back_populates="reihe") class Textform(db.Model): __table__ = db.Model.metadata.tables['Textform'] - texte = relationship("Text", back_populates="textform") + text = relationship("Text", back_populates="textform") class Sprache(db.Model): __table__ = db.Model.metadata.tables['Sprache'] - texte = relationship("Text", back_populates="sprache") + text = relationship("Text", back_populates="sprache") + +class Verlag(db.Model): + __table__ = db.Model.metadata.tables['Verlag'] + werk = relationship("Werk", back_populates="verlag") + +class Werksform(db.Model): + __table__ = db.Model.metadata.tables['Werksform'] + werk = relationship("Werk", back_populates="werksform") + diff --git a/the_works/templates/_nav.html b/the_works/templates/_nav.html index 2b9a336..167f8c1 100644 --- a/the_works/templates/_nav.html +++ b/the_works/templates/_nav.html @@ -2,5 +2,6 @@ diff --git a/the_works/templates/views/werk.html b/the_works/templates/views/werk.html new file mode 100644 index 0000000..83bd351 --- /dev/null +++ b/the_works/templates/views/werk.html @@ -0,0 +1,92 @@ +{% extends 'base.html' %} + +{% block title %}Werke{% endblock title %} + +{% block heading %}Werke{% endblock heading %} + +{% block content %} + +{% include "_icons.svg" %} + +{# {% include "views/_textmodal.js" %} #} + +
+
+ +
+ + + + + + + + + + + + + + {% for werk in werke %} + + + + + + + + + + {% endfor %} + +
TitelUntertitelReiheVerlagWerksformAktionen
{{ werk["titel"] }}{{ werk["untertitel"] }}{{ werk["reihe"] }}{{ werk["verlag"] }}{{ werk["werksform"] }}
+
+ + +{% endblock content %} \ No newline at end of file diff --git a/the_works/views/werk.py b/the_works/views/werk.py new file mode 100644 index 0000000..388054c --- /dev/null +++ b/the_works/views/werk.py @@ -0,0 +1,72 @@ +from flask import Blueprint, render_template, request, redirect, flash, url_for +from sqlalchemy import select, insert, update, delete +from the_works.database import db +from the_works.models import Werk, Reihe, Verlag, Werksform + +bp = Blueprint("werk", __name__) + +@bp.route("/werk/all") +@bp.route("/werk") +def read(): + # 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): + werke.append({ + "id": row.Werk.ID, + "titel": row.Werk.Titel, + "untertitel": row.Werk.Untertitel or "", + "reihe": row.Reihe.Titel if row.Reihe else "", + "r_id": str(row.Reihe.ID) if row.Reihe else "", + "verlag": row.Verlag.Verlag if row.Verlag else "", + "v_id": str(row.Verlag.ID) if row.Verlag else "", + "werksform": row.Werksform.Werksform if row.Werksform else "", + "wf_id": str(row.Werksform.ID) if row.Werksform else "" + }) + return render_template("views/werk.html", werke=werke, 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(): + """db.session.add(Text( + Titel = request.form["text_titel"], + Untertitel = request.form["text_untertitel"] or None, + Reihe = request.form["text_reihe"] or None, + Textform = request.form["text_textform"], + Sprache = request.form["text_sprache"] + )) + db.session.commit() + flash("Eintrag erfolgreich hinzugefügt") + """ + return redirect(url_for("werk.read")) + +@bp.route("/werk/update/", methods=["POST"]) +def update(id): + """# get record + text = db.session.get(Text, id) + # update values + text.Titel = request.form["text_titel"] + text.Untertitel = request.form["text_untertitel"] or None + text.Reihe = request.form["text_reihe"] or None + text.Textform = request.form["text_textform"] + text.Sprache = request.form["text_sprache"] + # commit changes + db.session.commit() + flash("Eintrag erfolgreich geändert") + """ + return redirect(url_for("werk.read")) + + +@bp.route("/werk/delete/") +def delete(id): + """ text = db.session.get(Text, id) + db.session.delete(text) + db.session.commit() + flash("Eintrag erfolgreich gelöscht") + """ + return redirect(url_for("werk.read"))