J'ai un arbre qui ressemble à ceci, reflété via l'héritage polymorphe :
A
/ | \
B C D
Ça marche bien, comme ça :
class BaseModel(db.Model): # Table A in diagram
__tablename__ = "entities"
id = db.Column(db.BigInteger, primary_key=True, nullable=False, server_default=func.nextval('guid_seq'))
type_id = db.Column(db.SmallInteger, db.ForeignKey(EntityTypesModel.id))
__mapper_args__ = {
'polymorphic_identity':'entity',
'polymorphic_on':type_id,
'with_polymorphic':'*'
}
class BrandModel(BaseModel): # Table B, C, D in diagram
__tablename__ = 'brands'
id = db.Column(db.BigInteger, db.ForeignKey(StufffModel.id), primary_key=True, nullable=False)
name = db.Column(db.String, nullable=False)
__mapper_args__ = {
'polymorphic_identity':ET_BRAND,
}
Le problème est que j'ai besoin de refléter quelque chose de plus comme ceci :
A
/ | \
B C D
/ \
E F
Où D est non seulement un enfant polymorphe de A mais aussi les parents polymorphes de E & F.
Il semble que je doive choisir, D peut être soit un enfant polymorphe, soit un parent - il ne peut pas être les deux.
Est-ce que j'ai des options ici ?
EDIT :
Pour terminer, j'ai fini par aplatir l'arbre pour qu'il ressemble à.. :
A
/ | \ \
B C E F
D a maintenant disparu et la fonctionnalité qu'il fournissait se trouve dans les enfants (E & F). Je vais probablement faire des parties communes un mixin ou quelque chose comme ça.
C'est dommage, mais je n'ai pas pu consacrer plus de temps à cette question particulière.