started work on view "read" (detailed view of single Werk)

This commit is contained in:
eclipse 2025-04-23 11:05:44 +02:00
parent 6f3c0c9975
commit 24488bb86d
2 changed files with 71 additions and 11 deletions

View File

@ -0,0 +1,51 @@
{% extends 'base.html' %}
{% block title %}"{{ werk["Titel"] }}" Detailansicht"{% endblock title %}
{% block heading %}"{{ werk["Titel"] }}" Detailansicht{% endblock heading %}
{% block content %}
{% set ID = werk["id"] %}
<article>
<form method="post" action="{{ url_for('werk.update', id=ID) }}" readonly>
<fieldset disabled="disabled">
<label>
Titel (erforderlich)
<input id="form_Titel" name="form_Titel" aria-label="Titel" placeholder="Titel" value="{{ werk['Titel'] }}" required />
</label>
<label>
Untertitel
<input id="form_Untertitel" name="form_Untertitel" aria-label="Untertitel" placeholder="Untertitel" value="{{ werk['Untertitel'] }}" />
</label>
<label>
Verlag
<select id="form_Verlag" name="form_Verlag" aria-label="Verlag">
<option value=""{% if werk['v_id'] == '' %} selected{% endif %}>kein Verlag</option>
{% for v in verlage %}<option value="{{ v.ID }}"{% if werk['v_id'] == v.ID %} selected{% endif %}>{{ v.Verlag }}</option>
{% endfor %}
</select>
</label>
<label>
Werksform
<select id="form_Werksform" name="form_Werksform" aria-label="Werksform">
<option value=""{% if werk['wf_id'] == '' %} selected{% endif %}>keine Werksform</option>
{% for wf in werksformen %}<option value="{{ wf.ID }}"{% if werk['wf_id'] == wf.ID %} selected{% endif %}>{{ wf.Werksform }}</option>
{% endfor %}
</select>
</label>
<label>
Reihe
<select id="form_Reihe" name="form_Reihe" aria-label="Der Text gehört zur Reihe …">
<option value="" {% if werk['r_id'] == "" %}selected{% endif %}>keine Reihe</option>
{% for r in reihen %}<option value="{{ r.ID }}" {% if werk['r_id'] == r.ID %}selected{% endif %}>{{ r.Titel }}</option>
{% endfor %}
</select>
</label>
<label>
Reihennummer
<input id="form_Reihennummer" name="form_Reihennummer" aria-label="Reihennummer" placeholder="keine Reihennummer" value="{{ werk['Reihennummer'] }}" />
</label>
</fieldset>
</form>
</article>
{% endblock content %}

View File

@ -5,19 +5,16 @@ from the_works.models import Werk, Reihe, Verlag, Werksform
bp = Blueprint("werk", __name__)
# ORM equivalent of SQL statement to select all Werk entries
read_statement = select(Werk, Reihe, Verlag, Werksform).join(Werk.reihe, isouter=True).join(Werk.verlag, isouter=True).join(Werk.werksform, isouter=True)
@bp.route("/werk")
@bp.route("/werk/all")
def all():
# build ORM equivalent of SELECT statement
stmt = (
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 db.session.execute(stmt):
for row in db.session.execute(read_statement):
werke.append({
"id": row.Werk.ID,
"Titel": row.Werk.Titel,
@ -30,9 +27,21 @@ def all():
@bp.route("/werk/read/<int:id>")
def read():
werk = db.session.get(Werk, id)
return render_template("views/werk_read.html", werk=werk)
def read(id):
row = db.session.execute(read_statement.where(Werk.ID == id)).one()
werk = {
"id": row.Werk.ID,
"Titel": row.Werk.Titel,
"Untertitel": row.Werk.Untertitel or "",
"Reihe": row.Reihe.Titel if row.Reihe else "",
"r_id": row.Reihe.ID if row.Reihe else "",
"Verlag": row.Verlag.Verlag if row.Verlag else "",
"v_id": row.Verlag.ID if row.Verlag else "",
"Werksform": row.Werksform.Werksform if row.Werksform else "",
"wf_id": row.Werksform.ID if row.Werksform else "",
"Reihennummer": row.Werk.Reihennummer or "",
}
return render_template("views/werk_read.html", werk=werk, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)))
@bp.route("/werk/create", methods=["POST"])
def create():