the_works/the_works/views/werk.py

102 lines
3.9 KiB
Python

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")
@bp.route("/werk/all")
def all():
# select all rows from table "Werk", ORM style
rows = db.session.execute(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 rows:
werke.append({
"id": row.Werk.ID,
"Titel": row.Werk.Titel,
"Untertitel": row.Werk.Untertitel or "",
"Werksform": row.Werksform.Werksform if row.Werksform else "",
"wf_id": row.Werk.Werksform or "",
"Verlag": row.Verlag.Verlag if row.Verlag else "",
"v_id": row.Werk.Verlag or "",
"Reihe": row.Reihe.Titel if row.Reihe else "",
"r_id": row.Werk.Reihe or ""
})
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/read/<int:id>")
def read(id):
werk = db.session.get(Werk, id)
return {
"Titel": werk.Titel,
"Untertitel": werk.Untertitel or "",
"Werksform": werk.Werksform or "",
"Verlag": werk.Verlag or "",
"Reihe": werk.Reihe or "",
"Reihennummer": werk.Reihennummer or "",
"Erscheinungsdatum": werk.Erscheinungsdatum or "",
"ISBN_13": werk.ISBN_13 or "",
"ISBN_10": werk.ISBN_10 or "",
"ISSN": werk.ISSN or "",
"Preis": werk.Preis or "",
"Titelbild": "",
"Klappentext": werk.Klappentext or "",
"Anmerkungen": werk.Anmerkungen or ""
}
@bp.route("/werk/create", methods=["POST"])
def create():
db.session.add(Werk(
Titel = request.form["form_Titel"],
Untertitel = request.form["form_Untertitel"] or None,
Werksform = request.form["form_Werksform"],
Verlag = request.form["form_Verlag"] or None,
Reihe = request.form["form_Reihe"] or None,
Reihennummer = request.form["form_Reihennummer"] or None,
Erscheinungsdatum = request.form["form_Erscheinungsdatum"] or None,
ISBN_13 = request.form["form_ISBN_13"] or None,
ISBN_10 = request.form["form_ISBN_10"] or None,
ISSN = request.form["form_ISSN"] or None,
Preis = request.form["form_Preis"] or None,
Titelbild = None,
Klappentext = request.form["form_Klappentext"] or None,
Anmerkungen = request.form["form_Anmerkungen"] or None
))
db.session.commit()
flash("Eintrag erfolgreich hinzugefügt")
return redirect(url_for("werk.all"))
@bp.route("/werk/update/<int:id>", methods=["POST"])
def update(id):
# get record
werk = db.session.get(Werk, id)
# update values
werk.Titel = request.form["form_Titel"]
werk.Untertitel = request.form["form_Untertitel"] or None
werk.Werksform = request.form["form_Werksform"]
werk.Verlag = request.form["form_Verlag"] or None
werk.Reihe = request.form["form_Reihe"] or None
werk.Reihennummer = request.form["form_Reihennummer"] or None
werk.Erscheinungsdatum = request.form["form_Erscheinungsdatum"] or None
werk.ISBN_13 = request.form["form_ISBN_13"] or None
werk.ISBN_10 = request.form["form_ISBN_10"] or None
werk.ISSN = request.form["form_ISSN"] or None
werk.Preis = request.form["form_Preis"] or None
werk.Titelbild = None
werk.Klappentext = request.form["form_Klappentext"] or None
werk.Anmerkungen = request.form["form_Anmerkungen"] or None
# commit changes
db.session.commit()
flash("Eintrag erfolgreich geändert")
return redirect(url_for("werk.all"))
@bp.route("/werk/delete/<int:id>")
def delete(id):
werk = db.session.get(Werk, id)
db.session.delete(werk)
db.session.commit()
flash("Eintrag erfolgreich gelöscht")
return redirect(url_for("werk.all"))