Flask-WTF
和Flask-SQLAlchemy
都是很好用的插件,然而当它们结合到一起后,就不是那么美妙了。
问题的提出
在models.py
中定义了一个Article
、Category
和Tag
类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
class Article(db.Model): """定义文章""" __tablename__ = 'articles' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128), unique=True, index=True) # 保存md格式的文本 content = db.Column(db.Text) # 保存html格式的文本 content_html = db.Column(db.Text) # 文章分类 category_id = db.Column(db.Integer, db.ForeignKey('categories.id')) # 文章标签 tags = db.relationship( 'Tag', secondary='article_tag_ref', backref='articles') class Category(db.Model): """文章分类""" __tablename__ = 'categories' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) articles = db.relationship('Article', backref='category', lazy='dynamic') class Tag(db.Model): """文章标签""" __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) # 文章和标签的映射表 ,多对多关系 article_tag_ref = db.Table('article_tag_ref', db.Column('article_id', db.Integer, db.ForeignKey('articles.id')), db.Column('tag_id', db.Integer, db.ForeignKey('tags.id')) ) |
然后在forms.py
中定义一个ArticleForm
表单
1 2 3 4 5 6 7 |
class ArticleForm(Form): title = StringField(u"标题", validators=[Required()]) category = QuerySelectField(u"分类", query_factory=getUserFactory(['id', 'name']), get_label='name') tags = StringField(u"标签", validators=[Required()]) content = PageDownField(u"正文", validators=[Required()]) submit = SubmitField(u"发布") |
此时在处理表单的时候可以这样:
1 2 3 4 |
form = ArticleForm() if form.validate_on_submit(): article = Article(title=from.data.title, content=form.data.content,category=form.category.data) 4d931186537" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 12px; margin-bottom: 12px; font-size: 13px !important; line-height: 15px !important;">
然后在
此时在处理表单的时候可以这样:
等等,这样怎么处理 |