diff --git a/the_works/models.py b/the_works/models.py index a559f04..7479a5e 100644 --- a/the_works/models.py +++ b/the_works/models.py @@ -4,6 +4,7 @@ from sqlalchemy.ext.associationproxy import association_proxy class Text(db.Model): __table__ = db.Model.metadata.tables['Text'] + reihe = relationship("Reihe", back_populates="text") textform = relationship("Textform", back_populates="text") sprache = relationship("Sprache", back_populates="text") @@ -19,6 +20,8 @@ class Werk(db.Model): veroeffentlichung = relationship("Veroeffentlichung", back_populates="werk") werk_genre = relationship("Werk_Genre", back_populates="werk", cascade="save-update, merge, delete, delete-orphan") genres = association_proxy("werk_genre", "Genre") + werk_herausgeber = relationship("Werk_Herausgeber", back_populates="werk", cascade="save-update, merge, delete, delete-orphan") + herausgeber = association_proxy("werk_herausgeber", "Herausgeber") class Veroeffentlichung(db.Model): __table__ = db.Model.metadata.tables['Veroeffentlichung'] @@ -60,6 +63,7 @@ class Pseudonym(db.Model): class Herausgeber(db.Model): __table__ = db.Model.metadata.tables['Herausgeber'] + werk_herausgeber = relationship("Werk_Herausgeber", back_populates="herausgeber") class Text_Genre(db.Model): __table__ = db.Model.metadata.tables['Text_Genre'] @@ -77,3 +81,11 @@ class Werk_Genre(db.Model): def __init__(self, genre: int): self.Genre = genre +class Werk_Herausgeber(db.Model): + __table__ = db.Model.metadata.tables['Werk_Herausgeber'] + werk = relationship("Werk", back_populates="werk_herausgeber") + herausgeber = relationship("Herausgeber", back_populates="werk_herausgeber") + + def __init__(self, hrsg: int): + self.Herausgeber = hrsg + diff --git a/the_works/templates/views/werk_detail.html b/the_works/templates/views/werk_detail.html index e4b95c3..b31a259 100644 --- a/the_works/templates/views/werk_detail.html +++ b/the_works/templates/views/werk_detail.html @@ -114,13 +114,39 @@ Werk bearbeiten
+
+
+ Herausgeber:in(nen) +
+ {% for column in hrsg | slice(4) %} +
+ {% for h in column %} + + {% endfor %} +
+ {% endfor %} +
+
+
+
Genre(s) - {% for g in genres %} - - - {% endfor %} +
+ {% for column in genres | slice(4) %} +
+ {% for g in column %} + + {% endfor %} +
+ {% endfor %} +

diff --git a/the_works/views/werk.py b/the_works/views/werk.py index 06fcf80..16a6aac 100644 --- a/the_works/views/werk.py +++ b/the_works/views/werk.py @@ -1,7 +1,7 @@ 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, Werk_Genre, Genre +from the_works.models import Werk, Reihe, Verlag, Werksform, Werk_Genre, Genre, Werk_Herausgeber, Herausgeber bp = Blueprint("werk", __name__) @@ -32,7 +32,7 @@ def all(): def read(id): # id of zero -> create new entry if id == 0: - return render_template("views/werk_detail.html", werk={"ID": 0, "Erscheinungsdatum": ""}, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)), genres=db.session.scalars(select(Genre))) + return render_template("views/werk_detail.html", werk={"ID": 0, "Erscheinungsdatum": ""}, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)), genres=db.session.scalars(select(Genre)), hrsg=db.session.scalars(select(Herausgeber))) # all other ids -> update existing entry w = db.session.get(Werk, id) werk = { @@ -51,9 +51,10 @@ def read(id): "Titelbild": "", "Klappentext": w.Klappentext or "", "Anmerkungen": w.Anmerkungen or "", + "Herausgeber": w.herausgeber, "Genres": w.genres } - return render_template("views/werk_detail.html", werk=werk, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)), genres=db.session.scalars(select(Genre))) + return render_template("views/werk_detail.html", werk=werk, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)), genres=db.session.scalars(select(Genre)), hrsg=db.session.scalars(select(Herausgeber))) @bp.route("/werk/create", methods=["POST"]) def create(): @@ -75,6 +76,8 @@ def create(): ) for g in request.form.getlist("form_Genres"): werk.genres.append(g) + for h in request.form.getlist("form_Herausgeber"): + werk.herausgeber.append(h) db.session.add(werk) db.session.commit() flash("Eintrag erfolgreich hinzugefügt") @@ -108,6 +111,13 @@ def update(id): for g in form_set - set(werk.genres): werk.genres.append(g) + # update herausgeber list by removing names not in form selection and adding selected ones not currently in list + form_set = set(map(lambda h: int(h), request.form.getlist("form_Herausgeber"))) + for h in set(werk.herausgeber) - form_set: + werk.herausgeber.remove(h) + for h in form_set - set(werk.herausgeber): + werk.herausgeber.append(h) + # commit changes db.session.commit() flash("Eintrag erfolgreich geändert")