Also, hier ist die Situation. Ich habe ein Viele-zu-Viele-Feld von Benutzern und Dateien. Hier ist der Basiscode:Filtern nach Beziehung in SQLAlchemy
owners_datasets = db.Table(
'owners_datasets',
db.Column('user_id', db.Integer(), db.ForeignKey(
'user.id', ondelete='CASCADE')),
db.Column('dataset_id', db.Integer(), db.ForeignKey(
'dataset.id', ondelete='CASCADE'))
)
class User(UserJsonSerializer, UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
...
class Dataset(DatasetJsonSerializer, db.Model):
id = db.Column(db.Integer(), primary_key=True)
...
owners = db.relationship(
'User',
secondary=owners_datasets,
backref=db.backref('collections', lazy='dynamic')
)
Mein Ziel hier ist nur eine Beziehung zwischen dem Dataset-Objekt und dem Benutzerobjekt einzurichten. Zu einem späteren Zeitpunkt möchte ich Datensätze nur für solche abfragen, bei denen der aktuelle Benutzer in der Eigentümerliste ist. Da dies ein Viele-zu-Viele-Mapping ist, suche ich nach etwas wie einer Abfrage, aber ich kann nichts finden. Das ist, was ich so weit gekommen:
datasets = Dataset.query.filter_by(Dataset.owners.any(current_user))
, die den Fehler zurückgibt:
AttributeError: 'User' object has no attribute '_annotate'
Ich habe nicht in der Lage gewesen, einen Hinweis auf diesen Fehler zu finden, und ich bin unsicher, mit wie um hier fortzufahren.
Mit Postgres 9,3
Sie sind ein Lebensretter. Ging auf eine sehr grobe Workaround und das ist eine echte Lösung. Gibt es irgendwelche Dokumente? –
Sicher, originale Beispiele in [any] (http://docs.sqlalchemy.org/en/rel_1_0/orm/internals.html#sqlalchemy.orm.properties.RelationshipProperty.Comparator.any) -Methode. – van