2014-01-30 26 views
0

我正在开发一个Flask-SQLAlchemy项目,并且实现了一个适用于我的SQLAlchemy模型的漂亮的JSON序列化方法。查询数据库后,我可以通过REST API轻松呈现数据。当我使用secondary表许多一对多的关系,这些表是db.Table情况下,像这样:SQLAlchemy辅助表可以是db.Model实例吗?

elections_voters = db.Table(
    'elections_voters', 
    db.metadata, 
    db.Column('election_id', db.Integer, db.ForeignKey('elections.id'), primary_key=True), 
    db.Column('user_id', db.Integer, db.ForeignKey('users.id'), primary_key=True), 
) 

class Election(MyModel): 
    __tablename__ = 'elections' 

    id = db.Column(db.Integer, db.Sequence('election_id_seq'), autoincrement=True, primary_key=True) 
    name = db.Column(db.Unicode(255)) 
    voters = db.relationship('User', secondary=elections_voters, backref='electionsVoting') 

比方说,我想是提出只是一个选民名单某次选举的API。我会做类似Election.query.get_or_404(election_id),然后返回election.voters.mycustomserialize(),因为voters将由SQLAlchemy填充。但是,它并不像db.Model那样是父类的实例,所以我不能在该子节点上使用我的序列化方法。

有没有办法建立我的模型,使得elections_voters二级表是db.Model的完整实例,而不仅仅是db.Table,这是明智的吗?我的序列化方法需要访问列名,这就是为什么我没有把它分解成独立的方法。

回答

0

我过思前想:

在这种情况下,elections.voters只是一个列表,而不是模型实例。我可以使用列表理解来处理序列化。

此外,有Association Objects做我所描述的,但我不认为我会需要他们。

相关问题