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
+
+
+
+
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")