Flask Web开发:用Select2实现类似知乎的标签系统

知乎的标签是这样的

这里写图片描述

用Select 2实现的是这样的

这里写图片描述

实现分类

Select2主要是用来美化分类表单,在使用之前要先实现分类的功能,简单的可以一对多,难一点可以搞一个多对多

一对多关系的分类

如果只是想一篇文章设置一个分类,可以用一对多,“一”这边是某个分类,然后“多”这一边就是要添加到该分类下的文章,书中虽然没有直接实现这样的分类功能,但是已经实现了一对多的关系,可以参考着来实现,书中的是Post模型跟Comment模型的一对多,实现一对多关系的分类,可以将Post模型换成Category模型,Comment对应地换成Post,参考代码:

class Category(db.Model):
    __tablename__ = 'categories'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Unicode(32), unique=True, index=True,
        nullable=False)
    posts = db.relationship('Post', backref='category', lazy='dynamic')

    # 可以添加一个generate_fake函数,用来测试的时候生成假的分类
    @staticmethod
    def generate_fake(count=100):
        from sqlalchemy.exc import IntegrityError
        from random import seed, randint
        import forgery_py

        seed()
        for i in range(count):
            t = Category(name=forgery_py.lorem_ipsum.word())
            db.session.add(t)
            try:
                db.session.commit()
            except IntegrityError:
                db.session.rollback()

    def __repr__(self):
        return '<Category %r>' % self.name

# 写完了Category类,相应地在Post类里面改一下
class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.Text)
    body = db.Column(db.Text)
    body_html = db.Column(db.Text)
    summary = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('Comment', backref='post', lazy='dynamic')
    category_id = db.Column(db.Integer, db.Foreign
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值