Herausgeber can now be added, edited, and removed from Werk entries
This commit is contained in:
parent
260b444966
commit
d7d66a14c4
@ -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
|
||||
|
||||
|
||||
@ -114,13 +114,39 @@ Werk bearbeiten
|
||||
</div>
|
||||
</section>
|
||||
<hr />
|
||||
<section>
|
||||
<fieldset>
|
||||
<legend>Herausgeber:in(nen)</legend>
|
||||
<div class="grid">
|
||||
{% for column in hrsg | slice(4) %}
|
||||
<div>
|
||||
{% for h in column %}
|
||||
<label>
|
||||
<input id="form_Herausgeber_{{ h.ID }}" name="form_Herausgeber" type="checkbox" value="{{ h.ID }}" {% if h.ID in werk["Herausgeber"] %} checked {% endif %}/>
|
||||
{{ h.Name }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</fieldset>
|
||||
</section>
|
||||
<hr />
|
||||
<section>
|
||||
<fieldset>
|
||||
<legend>Genre(s)</legend>
|
||||
{% for g in genres %}
|
||||
<input id="form_Genres_{{ g.ID }}" name="form_Genres" type="checkbox" value="{{ g.ID }}" {% if g.ID in werk["Genres"] %} checked {% endif %}/>
|
||||
<label for="form_Genres_{{ g.ID }}">{{ g.Genre }}</label>
|
||||
{% endfor %}
|
||||
<div class="grid">
|
||||
{% for column in genres | slice(4) %}
|
||||
<div>
|
||||
{% for g in column %}
|
||||
<label>
|
||||
<input id="form_Genres_{{ g.ID }}" name="form_Genres" type="checkbox" value="{{ g.ID }}" {% if g.ID in werk["Genres"] %} checked {% endif %}/>
|
||||
{{ g.Genre }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</fieldset>
|
||||
</section>
|
||||
<hr />
|
||||
|
||||
@ -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")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user