【问题标题】:Flask pagination, query issue, why so many items?Flask 分页,查询问题,为什么这么多项目?
【发布时间】:2021-06-16 15:21:18
【问题描述】:

我在博客页面上工作,我正在尝试按标签过滤帖子,问题是当只有 1 或 2 个帖子与查询匹配时,我得到了几个页面(我将 per_page 设置为 6)。

我有另一个过滤器可以正常工作,因此我猜问题出在查询对象中。

这是我的视图索引代码的一部分:

if current_user.is_authenticated:
        show_followed = bool(request.cookies.get('show_followed', ''))
    if show_followed:
        query = current_user.followed_posts
    elif show_tag:
        tag = Tag.query.filter_by(tag_name=show_tag).first()
        query = tag.post
    else:
        query = Post.query
        
    page = request.args.get('page', 1, type=int)
    pagination = query.order_by(Post.timestamp.desc()).paginate(
        page, per_page=current_app.config['POSTS_PER_PAGE'],
        error_out=False)
    posts = pagination.items
    
    return render_template("index.html", posts=posts, pagination = pagination, show_followed=show_followed, show_tag=show_tag)

当我尝试在控制台中复制问题时,我检查示例标签的查询是否匹配 3 个帖子,但 pagination.total(项目总数)返回 23!分页对象将什么作为项目?

我这样做是为了在烧瓶外壳中进行测试:

tagname = 'pruebatag'
tag = Tag.query.filter_by(tag_name=tagname).first()
query = tag.post
#here if y try query.all() I get 3 posts in return

pag_object = query.paginate(per_page = 6)

pag_object.total
>>> 23
pag_object.pages
>>> 4

pag_object.items   #returns items for current page
>>> [<Post example>] #only one post returned for this page? why 4 pages?

我复制了我对 tags 表的定义:

class Tag(db.Model):
    __tablename__ = 'tags'
    id = db.Column(db.Integer, primary_key=True)
    tag_name = db.Column(db.String(40), unique=True)

    def add_tag(self):
        if not self.id:
            db.session.add(self)
            db.session.commit()

tag_join = db.Table('tag_join',
                    db.Column('post_id', db.Integer, db.ForeignKey('post.id')),
                    db.Column('tag_id', db.Integer, db.ForeignKey('tags.id'))
                    )

在后期模型中:

tags = db.relationship('Tag',
                           secondary=tag_join,
                           backref=db.backref('post', lazy='dynamic'),
                           lazy='dynamic')

任何帮助将不胜感激,因为我在这个问题上浪费了很多时间 如果您需要更多详细信息,请告诉我。

谢谢!

【问题讨论】:

    标签: flask pagination flask-sqlalchemy


    【解决方案1】:

    最后我发现发生了什么,我意识到表 tag_join 充满了重复,这导致了问题。

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2011-10-13
      • 2012-09-26
      • 2010-09-07
      • 2010-10-04
      • 2011-01-15
      • 2021-05-08
      相关资源
      最近更新 更多