From 4a842850d2d64d3ec784b554f3156183e8bed088 Mon Sep 17 00:00:00 2001 From: eclipse Date: Wed, 7 May 2025 18:21:30 +0200 Subject: [PATCH] added new classes and relationships; Text now has an AssociationProxy for easier access to associated genres --- the_works/models.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/the_works/models.py b/the_works/models.py index 47ec3c9..e05ac0b 100644 --- a/the_works/models.py +++ b/the_works/models.py @@ -1,23 +1,29 @@ from the_works.database import db from sqlalchemy.orm import relationship +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") - - def __repr__(self): - return f"Text(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Reihe={self.Reihe})" + veroeffentlichung = relationship("Veroeffentlichung", back_populates="text") + text_genre = relationship("Text_Genre", back_populates="text", cascade="save-update, merge, delete, delete-orphan") + genres = association_proxy("text_genre", "Genre") class Werk(db.Model): __table__ = db.Model.metadata.tables['Werk'] reihe = relationship("Reihe", back_populates="werk") verlag = relationship("Verlag", back_populates="werk") werksform = relationship("Werksform", back_populates="werk") + veroeffentlichung = relationship("Veroeffentlichung", back_populates="werk") + werk_genre = relationship("Werk_Genre", back_populates="werk") - def __repr__(self): - return f"Werk(ID={self.ID}, Titel={self.Titel}, Untertitel={self.Untertitel}, Erscheinungsdatum={self.Erscheinungsdatum})" +class Veroeffentlichung(db.Model): + __table__ = db.Model.metadata.tables['Veroeffentlichung'] + text = relationship("Text", back_populates="veroeffentlichung") + werk = relationship("Werk", back_populates="veroeffentlichung") + pseudonym = relationship("Pseudonym", back_populates="veroeffentlichung") class Reihe(db.Model): __table__ = db.Model.metadata.tables['Reihe'] @@ -44,9 +50,26 @@ class Werksform(db.Model): class Genre(db.Model): __table__ = db.Model.metadata.tables['Genre'] + text_genre = relationship("Text_Genre", back_populates="genre") + werk_genre = relationship("Werk_Genre", back_populates="genre") class Pseudonym(db.Model): __table__ = db.Model.metadata.tables['Pseudonym'] + veroeffentlichung = relationship("Veroeffentlichung", back_populates="pseudonym") class Herausgeber(db.Model): __table__ = db.Model.metadata.tables['Herausgeber'] + +class Text_Genre(db.Model): + __table__ = db.Model.metadata.tables['Text_Genre'] + text = relationship("Text", back_populates="text_genre") + genre = relationship("Genre", back_populates="text_genre") + + def __init__(self, genre: int): + self.Genre = genre + +class Werk_Genre(db.Model): + __table__ = db.Model.metadata.tables['Werk_Genre'] + werk = relationship("Werk", back_populates="werk_genre") + genre = relationship("Genre", back_populates="werk_genre") +