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):
|
class Text(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Text']
|
__table__ = db.Model.metadata.tables['Text']
|
||||||
|
|
||||||
reihe = relationship("Reihe", back_populates="text")
|
reihe = relationship("Reihe", back_populates="text")
|
||||||
textform = relationship("Textform", back_populates="text")
|
textform = relationship("Textform", back_populates="text")
|
||||||
sprache = relationship("Sprache", back_populates="text")
|
sprache = relationship("Sprache", back_populates="text")
|
||||||
@ -19,6 +20,8 @@ class Werk(db.Model):
|
|||||||
veroeffentlichung = relationship("Veroeffentlichung", back_populates="werk")
|
veroeffentlichung = relationship("Veroeffentlichung", back_populates="werk")
|
||||||
werk_genre = relationship("Werk_Genre", back_populates="werk", cascade="save-update, merge, delete, delete-orphan")
|
werk_genre = relationship("Werk_Genre", back_populates="werk", cascade="save-update, merge, delete, delete-orphan")
|
||||||
genres = association_proxy("werk_genre", "Genre")
|
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):
|
class Veroeffentlichung(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Veroeffentlichung']
|
__table__ = db.Model.metadata.tables['Veroeffentlichung']
|
||||||
@ -60,6 +63,7 @@ class Pseudonym(db.Model):
|
|||||||
|
|
||||||
class Herausgeber(db.Model):
|
class Herausgeber(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Herausgeber']
|
__table__ = db.Model.metadata.tables['Herausgeber']
|
||||||
|
werk_herausgeber = relationship("Werk_Herausgeber", back_populates="herausgeber")
|
||||||
|
|
||||||
class Text_Genre(db.Model):
|
class Text_Genre(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Text_Genre']
|
__table__ = db.Model.metadata.tables['Text_Genre']
|
||||||
@ -77,3 +81,11 @@ class Werk_Genre(db.Model):
|
|||||||
def __init__(self, genre: int):
|
def __init__(self, genre: int):
|
||||||
self.Genre = genre
|
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>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<hr />
|
<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>
|
<section>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Genre(s)</legend>
|
<legend>Genre(s)</legend>
|
||||||
{% for g in genres %}
|
<div class="grid">
|
||||||
<input id="form_Genres_{{ g.ID }}" name="form_Genres" type="checkbox" value="{{ g.ID }}" {% if g.ID in werk["Genres"] %} checked {% endif %}/>
|
{% for column in genres | slice(4) %}
|
||||||
<label for="form_Genres_{{ g.ID }}">{{ g.Genre }}</label>
|
<div>
|
||||||
{% endfor %}
|
{% 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>
|
</fieldset>
|
||||||
</section>
|
</section>
|
||||||
<hr />
|
<hr />
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
from flask import Blueprint, render_template, request, redirect, flash, url_for
|
from flask import Blueprint, render_template, request, redirect, flash, url_for
|
||||||
from sqlalchemy import select, insert, update, delete
|
from sqlalchemy import select, insert, update, delete
|
||||||
from the_works.database import db
|
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__)
|
bp = Blueprint("werk", __name__)
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ def all():
|
|||||||
def read(id):
|
def read(id):
|
||||||
# id of zero -> create new entry
|
# id of zero -> create new entry
|
||||||
if id == 0:
|
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
|
# all other ids -> update existing entry
|
||||||
w = db.session.get(Werk, id)
|
w = db.session.get(Werk, id)
|
||||||
werk = {
|
werk = {
|
||||||
@ -51,9 +51,10 @@ def read(id):
|
|||||||
"Titelbild": "",
|
"Titelbild": "",
|
||||||
"Klappentext": w.Klappentext or "",
|
"Klappentext": w.Klappentext or "",
|
||||||
"Anmerkungen": w.Anmerkungen or "",
|
"Anmerkungen": w.Anmerkungen or "",
|
||||||
|
"Herausgeber": w.herausgeber,
|
||||||
"Genres": w.genres
|
"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"])
|
@bp.route("/werk/create", methods=["POST"])
|
||||||
def create():
|
def create():
|
||||||
@ -75,6 +76,8 @@ def create():
|
|||||||
)
|
)
|
||||||
for g in request.form.getlist("form_Genres"):
|
for g in request.form.getlist("form_Genres"):
|
||||||
werk.genres.append(g)
|
werk.genres.append(g)
|
||||||
|
for h in request.form.getlist("form_Herausgeber"):
|
||||||
|
werk.herausgeber.append(h)
|
||||||
db.session.add(werk)
|
db.session.add(werk)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash("Eintrag erfolgreich hinzugefügt")
|
flash("Eintrag erfolgreich hinzugefügt")
|
||||||
@ -108,6 +111,13 @@ def update(id):
|
|||||||
for g in form_set - set(werk.genres):
|
for g in form_set - set(werk.genres):
|
||||||
werk.genres.append(g)
|
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
|
# commit changes
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash("Eintrag erfolgreich geändert")
|
flash("Eintrag erfolgreich geändert")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user