Я работаю с тремя моделями: User, Magazine и Article. Каждый пользователь может подписаться на множество журналов (для которых я использую таблицу подписок). Статьи принадлежат только журналу. Ниже приведены модели, с которыми я работаю:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column( db.String(64) )
subscriptions= db.relationship('Magazine', secondary=subs, backref=db.backref('subscribers', lazy='dynamic'), lazy='dynamic')
class Magazine(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
articles= db.relationship('Article', backref='magazine', lazy='dynamic')
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(64))
abstract = db.Column(db.String(64))
magazine_id= db.Column(db.Integer, db.ForeignKey('magazine.id'))
subs = db.Table('subs',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('magazine_id', db.Integer, db.ForeignKey('magazine.id'))
)
Что мне нужно: дать пользователю возможность получить все статьи из журналов, на которые он подписан. Давайте сделаем тест из оболочки фляги:
biel=User(name='biel')
ng = Magazine(name='National Geographic')
pt=Magazine(name='Physics Today')
ng.subscribers.append(biel)
pt.subscribers.append(biel)
a1=Article(title='title 1, ng')
ng.articles.append(a1)
a2=Article(title='title 2, pt')
pt.articles.append(a2)
a3=Article(title='title 3, pt')
pt.articles.append(a3)
a4=Article(title='title 4, pt')
pt.articles.append(a4)
a5=Article(title='title 5, pt')
pt.articles.append(a5)
a6=Article(title='title 6, pt')
pt.articles.append(a6)
Например, теперь я могу получить все статьи в журнале Physics Today, выполнив:
pt_articles=pt.articles.paginate(1,3,False)
Как я могу аналогичным образом (избазу данных) извлечь все статьи из журналов, на которые подписан пользователь "biel" ?. Я знаю, что могу сделать следующее:
articles=[]
for m in biel.subscriptions:
articles+=m.articles.all()
, но это не то, чего я хочу, потому что я не могу разбить статьи на страницы или упорядочить их по дате публикации ecc. Мне нужно что-то вроде:
articles=[]
for m in biel.subscriptions:
articles+=m.articles
articles.paginate(1,3,False)
, но теперь статьи представляют собой список и не могут быть разбиты на страницы.
Большое спасибо заранее