File size: 1,266 Bytes
46e055c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f3e511
46e055c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from app import db
from sqlalchemy import func # pour lower()

class Matiere(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nom = db.Column(db.String(64), unique=True, nullable=False)
    sous_categories = db.relationship('SousCategorie', backref='matiere', lazy='dynamic', cascade="all, delete-orphan")

    def __repr__(self):
        return f'<Matiere {self.nom}>'


class SousCategorie(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nom = db.Column(db.String(64), nullable=False)
    matiere_id = db.Column(db.Integer, db.ForeignKey('matiere.id'), nullable=False)
    textes = db.relationship('Texte', backref='sous_categorie', lazy='dynamic', cascade="all, delete-orphan")
    # Contrainte d'unicité composite
    __table_args__ = (
        db.UniqueConstraint('nom', 'matiere_id', name='_nom_matiere_uc'),
    )


    def __repr__(self):
        return f'<SousCategorie {self.nom}>'

class Texte(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    titre = db.Column(db.String(128), nullable=False)
    contenu = db.Column(db.Text, nullable=False)
    sous_categorie_id = db.Column(db.Integer, db.ForeignKey('sous_categorie.id'), nullable=False)
    
    def __repr__(self):
        return f'<Texte {self.titre}>'