Ich habe ein Elternmodell, das ein paar verschiedene Arten von Elementen als ihre Eltern über einen Fremdschlüssel verwenden. Ich habe auch eine Beziehung von vielen zu vielen auf dem Elternmodell. Ich versuche, das Kindmodell basierend auf dem Viel-zu-Vielen-Modell abzufragen.Flask-SQLAlchemy Filter auf viele zu viele Beziehung mit Elternmodell
Dies ist das übergeordnete Modell
class MediaItem(db.Model):
__tablename__ = "media_item"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String, unique=True)
tags = db.relationship('Tags', secondary=tags_joiner, backref='media_items')
videos = db.relationship('Video', backref='Parent', lazy='dynamic')
audios = db.relationship('Audio', backref='Parent', lazy='dynamic')
pictures = db.relationship('Picture', backref='Parent', lazy='dynamic')
codes = db.relationship('Code', backref='Parent', lazy='dynamic')
Und die viele zu viele Beziehung
class Tags(db.Model):
__tablename__ = 'tags'
id = db.Column(db.Integer, primary_key=True)
tag = db.Column(db.String, unique=True, nullable=False)
tags_joiner = db.Table('tags_joiner',
db.Column('tag_id', db.Integer, db.ForeignKey('tags.id')),
db.Column('mediaitem_id', db.Integer, db.ForeignKey('media_item.id')),
db.PrimaryKeyConstraint('tag_id', 'mediaitem_id'))
Schließlich ein Beispiel fo das Kind Modell
class Video(db.Model):
__tablename__ = 'video'
id = db.Column(db.Integer, primary_key=True)
parent_id = db.Column(db.Integer, db.ForeignKey('media_item.id'))
file_name = db.Column(db.String, unique=True)
Es gibt ein paar gibt es andere Arten von Kindmodellen, die durch die im MediaItem-Modell definierten Beziehungen belegt werden.
Ich bin auf der Suche nach Filtern auf das Kind-Modell durch das Tag. Das bedeutet, dass bei einem bestimmten Tag alle untergeordneten Modelle zurückgegeben werden, die diesem Tag zugeordnet sind.
Video.query.join(media_tags).filter_by(MediaItem.tags.any(Tags.tag.in_(tag)))
Returns, dass es nicht weiß, wie die drei Tabellen zu verbinden, (kann nicht eine FROM-Klausel findet von zu verbinden versuchte Beitritt zu, bekam aber:. Kann keine Fremdschlüsselbeziehungen zwischen ‚media_item‘ gefunden und "Tags".)
Was könnte meine Herangehensweise dazu sein?