added first view for table "Werk"
This commit is contained in:
parent
df9d59d7ae
commit
03cd3f4767
@ -26,9 +26,10 @@ def create_app():
|
|||||||
init_db(app)
|
init_db(app)
|
||||||
|
|
||||||
# register blueprints
|
# register blueprints
|
||||||
from the_works.views import home, text
|
from the_works.views import home, text, werk
|
||||||
app.register_blueprint(text.bp)
|
app.register_blueprint(text.bp)
|
||||||
app.register_blueprint(home.bp)
|
app.register_blueprint(home.bp)
|
||||||
|
app.register_blueprint(werk.bp)
|
||||||
|
|
||||||
# load debug toolbar
|
# load debug toolbar
|
||||||
toolbar = DebugToolbarExtension(app)
|
toolbar = DebugToolbarExtension(app)
|
||||||
|
|||||||
@ -3,25 +3,41 @@ from sqlalchemy.orm import relationship
|
|||||||
|
|
||||||
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="texte")
|
reihe = relationship("Reihe", back_populates="text")
|
||||||
textform = relationship("Textform", back_populates="texte")
|
textform = relationship("Textform", back_populates="text")
|
||||||
sprache = relationship("Sprache", back_populates="texte")
|
sprache = relationship("Sprache", back_populates="text")
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"Text(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Reihe={self.Reihe})"
|
return f"Text(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Reihe={self.Reihe})"
|
||||||
|
|
||||||
class Werk(db.Model):
|
class Werk(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Werk']
|
__table__ = db.Model.metadata.tables['Werk']
|
||||||
|
reihe = relationship("Reihe", back_populates="werk")
|
||||||
|
verlag = relationship("Verlag", back_populates="werk")
|
||||||
|
werksform = relationship("Werksform", back_populates="werk")
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"Werk(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Erscheinungsdatum={self.Erscheinungsdatum})"
|
||||||
|
|
||||||
class Reihe(db.Model):
|
class Reihe(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Reihe']
|
__table__ = db.Model.metadata.tables['Reihe']
|
||||||
texte = relationship("Text", back_populates="reihe")
|
text = relationship("Text", back_populates="reihe")
|
||||||
|
werk = relationship("Werk", back_populates="reihe")
|
||||||
|
|
||||||
class Textform(db.Model):
|
class Textform(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Textform']
|
__table__ = db.Model.metadata.tables['Textform']
|
||||||
texte = relationship("Text", back_populates="textform")
|
text = relationship("Text", back_populates="textform")
|
||||||
|
|
||||||
class Sprache(db.Model):
|
class Sprache(db.Model):
|
||||||
__table__ = db.Model.metadata.tables['Sprache']
|
__table__ = db.Model.metadata.tables['Sprache']
|
||||||
texte = relationship("Text", back_populates="sprache")
|
text = relationship("Text", back_populates="sprache")
|
||||||
|
|
||||||
|
class Verlag(db.Model):
|
||||||
|
__table__ = db.Model.metadata.tables['Verlag']
|
||||||
|
werk = relationship("Werk", back_populates="verlag")
|
||||||
|
|
||||||
|
class Werksform(db.Model):
|
||||||
|
__table__ = db.Model.metadata.tables['Werksform']
|
||||||
|
werk = relationship("Werk", back_populates="werksform")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,5 +2,6 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('home.home') }}">Home</a></li>
|
<li><a href="{{ url_for('home.home') }}">Home</a></li>
|
||||||
<li><a href="{{ url_for('text.read') }}">Texte</a></li>
|
<li><a href="{{ url_for('text.read') }}">Texte</a></li>
|
||||||
|
<li><a href="{{ url_for('werk.read') }}">Werke</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
92
the_works/templates/views/werk.html
Normal file
92
the_works/templates/views/werk.html
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}Werke{% endblock title %}
|
||||||
|
|
||||||
|
{% block heading %}Werke{% endblock heading %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% include "_icons.svg" %}
|
||||||
|
|
||||||
|
{# {% include "views/_textmodal.js" %} #}
|
||||||
|
|
||||||
|
<article>
|
||||||
|
<section>
|
||||||
|
<button onclick="showCreateModal()" title="Werk hinzufügen">
|
||||||
|
<!-- <svg viewbox="0 0 24 24"><use href="#create" /></svg> -->
|
||||||
|
Neu …
|
||||||
|
</button>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Titel</th>
|
||||||
|
<th>Untertitel</th>
|
||||||
|
<th>Reihe</th>
|
||||||
|
<th>Verlag</th>
|
||||||
|
<th>Werksform</th>
|
||||||
|
<th colspan="2">Aktionen</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for werk in werke %}
|
||||||
|
<tr id="werk-{{ werk['id'] }}">
|
||||||
|
<td title="Titel">{{ werk["titel"] }}</td>
|
||||||
|
<td title="Untertitel">{{ werk["untertitel"] }}</td>
|
||||||
|
<td title="Reihe">{{ werk["reihe"] }}</td>
|
||||||
|
<td title="Verlag">{{ werk["verlag"] }}</td>
|
||||||
|
<td title="Werksform">{{ werk["werksform"] }}</td>
|
||||||
|
<td><a onclick="showUpdateModal('{{ werk["titel"] }}', '{{ werk["untertitel"] }}', '{{ werk["r_id"] }}', '{{ werk["v_id"] }}', '{{ werk["wf_id"] }}', '{{ url_for("werk.update", id=werk["id"]) }}');" title="Werk bearbeiten"><svg viewbox="0 0 24 24"><use href="#update" /></svg></a></td>
|
||||||
|
<td><a onclick="return confirm('Eintrag wirklich löschen?');" href="{{ url_for('werk.delete', id=werk["id"]) }}" title="Werk löschen"><svg viewbox="0 0 24 24"><use href="#delete" /></svg></a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<!-- <dialog aria-labelledby="dialog-heading" id="textmodal">
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<button aria-label="close" rel="prev" onclick="textmodal.close()"></button>
|
||||||
|
<h1 id="dialog-heading">Neuer Text</h1>
|
||||||
|
</header>
|
||||||
|
<form>
|
||||||
|
<label>
|
||||||
|
Titel (erforderlich)
|
||||||
|
<input id="text_titel" name="text_titel" placeholder="Titel" required />
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Untertitel
|
||||||
|
<input id="text_untertitel" name="text_untertitel" placeholder="Untertitel" />
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Reihe
|
||||||
|
<select id="text_reihe" name="text_reihe" aria-label="Der Text gehört zur Reihe …">
|
||||||
|
<option selected value="">keine Reihe</option>
|
||||||
|
{% for r in reihen %}<option value="{{ r.ID }}">{{ r.Titel }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Textform (erforderlich)
|
||||||
|
<select id="text_textform" name="text_textform" aria-label="Textform" required>
|
||||||
|
<option selected disabled value="">Textform auswählen …</option>
|
||||||
|
{% for tf in textformen %}<option value="{{ tf.ID }}">{{ tf.Textform }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Sprache (erforderlich)
|
||||||
|
<select id="text_sprache" name="text_sprache" aria-label="Sprache des Textes" required>
|
||||||
|
<option selected disabled value="">Sprache auswählen …</option>
|
||||||
|
{% for s in sprachen %}<option value="{{ s.ID }}">{{ s.Sprache }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
<button id="text_submit" type="submit" formmethod="post" formaction="{{ url_for('text.create') }}">OK</button>
|
||||||
|
<button aria-label="close" formmethod="dialog" formnovalidate>Abbrechen</button>
|
||||||
|
</form>
|
||||||
|
</article>
|
||||||
|
</dialog> -->
|
||||||
|
{% endblock content %}
|
||||||
72
the_works/views/werk.py
Normal file
72
the_works/views/werk.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
bp = Blueprint("werk", __name__)
|
||||||
|
|
||||||
|
@bp.route("/werk/all")
|
||||||
|
@bp.route("/werk")
|
||||||
|
def read():
|
||||||
|
# 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):
|
||||||
|
werke.append({
|
||||||
|
"id": row.Werk.ID,
|
||||||
|
"titel": row.Werk.Titel,
|
||||||
|
"untertitel": row.Werk.Untertitel or "",
|
||||||
|
"reihe": row.Reihe.Titel if row.Reihe else "",
|
||||||
|
"r_id": str(row.Reihe.ID) if row.Reihe else "",
|
||||||
|
"verlag": row.Verlag.Verlag if row.Verlag else "",
|
||||||
|
"v_id": str(row.Verlag.ID) if row.Verlag else "",
|
||||||
|
"werksform": row.Werksform.Werksform if row.Werksform else "",
|
||||||
|
"wf_id": str(row.Werksform.ID) if row.Werksform else ""
|
||||||
|
})
|
||||||
|
return render_template("views/werk.html", werke=werke, 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():
|
||||||
|
"""db.session.add(Text(
|
||||||
|
Titel = request.form["text_titel"],
|
||||||
|
Untertitel = request.form["text_untertitel"] or None,
|
||||||
|
Reihe = request.form["text_reihe"] or None,
|
||||||
|
Textform = request.form["text_textform"],
|
||||||
|
Sprache = request.form["text_sprache"]
|
||||||
|
))
|
||||||
|
db.session.commit()
|
||||||
|
flash("Eintrag erfolgreich hinzugefügt")
|
||||||
|
"""
|
||||||
|
return redirect(url_for("werk.read"))
|
||||||
|
|
||||||
|
@bp.route("/werk/update/<int:id>", methods=["POST"])
|
||||||
|
def update(id):
|
||||||
|
"""# get record
|
||||||
|
text = db.session.get(Text, id)
|
||||||
|
# update values
|
||||||
|
text.Titel = request.form["text_titel"]
|
||||||
|
text.Untertitel = request.form["text_untertitel"] or None
|
||||||
|
text.Reihe = request.form["text_reihe"] or None
|
||||||
|
text.Textform = request.form["text_textform"]
|
||||||
|
text.Sprache = request.form["text_sprache"]
|
||||||
|
# commit changes
|
||||||
|
db.session.commit()
|
||||||
|
flash("Eintrag erfolgreich geändert")
|
||||||
|
"""
|
||||||
|
return redirect(url_for("werk.read"))
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/werk/delete/<int:id>")
|
||||||
|
def delete(id):
|
||||||
|
""" text = db.session.get(Text, id)
|
||||||
|
db.session.delete(text)
|
||||||
|
db.session.commit()
|
||||||
|
flash("Eintrag erfolgreich gelöscht")
|
||||||
|
"""
|
||||||
|
return redirect(url_for("werk.read"))
|
||||||
Loading…
Reference in New Issue
Block a user