2016-12-05 109 views
1
class Poll(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(255), unique=False) 
    is_deleted = db.Column(db.Boolean, default=False) 
    created_date = db.Column(db.DateTime, default=datetime.datetime.utcnow) 
    answers = db.relationship('Answer', backref='poll') 

class Answer(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    poll_id = db.Column(db.Integer, db.ForeignKey(Poll.id), nullable=False) 
    title = db.Column(db.String(255), unique=False, nullable=False) 
    votes = db.Column(db.Integer, nullable=False) 
    is_deleted = db.Column(db.Boolean, default=False, nullable=False) 
    created_date = db.Column(db.DateTime, default=datetime.datetime.utcnow) 

poll = PollModel.query.join(
    PollModel.answers 
).options(
    subqueryload(PollModel.answers.query) 
).filter(
    PollModel.id == poll_id, 
    PollModel.is_deleted == False, 
)[0] 

我想过滤由“is_deleted”属性子查询的相关答案。但是,我一直只会过滤民意调查是否有未删除的答案。如何通过子查询过滤相关对象。SQLAlchemy过滤器相关的子查询

+0

我认为你需要使用'contains_eager'来实现这一点。请看看这个选项的文档。此外[这个答案](http://stackoverflow.com/a/7804059/99594)可能会有所帮助。 – van

回答

0

这项工作?

poll = Poll.query.filter(and_(Poll.id == poll.id, Poll.answers.any(is_deleted == False)).first()