Самый простой способ - определить отношение вне класса после определения всех классов.
Удалите определение latest_article
из NewsPaper
и добавьте следующий код после определения class Article
(взято непосредственно из ответа Майка, на который вы ссылались):
# define the relationship
t_article = Article.__table__
t_newpaper = NewsPaper.__table__
latest_c = (select([t_article.c.id]).
where(t_article.c.newspaper_id == t_newpaper.c.id).
order_by(t_article.c.id.desc()).
limit(1).
correlate(t_newpaper).
as_scalar()
)
NewsPaper.latest_article = relationship("Article",
primaryjoin=and_(
t_article.c.id==latest_c,
t_article.c.newspaper_id==t_newpaper.c.id,
),
uselist=False
)
Одно замечание: связь работает непосредственно с базой данных, и поэтому не будет включать в себя те экземпляры Article
, которые еще не зафиксированы, но являются частью сеанса И, скорее всего, это будут те, кого вы действительно хотите. Так что будьте осторожны с этим.