2016-04-25 32 views
1

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

Antwort

2
Dataset.query.filter(Dataset.owners.any(User.id==current_user.id)) 
+0

Sie sind ein Lebensretter. Ging auf eine sehr grobe Workaround und das ist eine echte Lösung. Gibt es irgendwelche Dokumente? –

+0

Sicher, originale Beispiele in [any] (http://docs.sqlalchemy.org/en/rel_1_0/orm/internals.html#sqlalchemy.orm.properties.RelationshipProperty.Comparator.any) -Methode. – van

Verwandte Themen