【发布时间】:2017-03-05 18:11:37
【问题描述】:
我有以下数据库模型:
class FlashcardCollection(db.Model):
__tablename__ = 'flashcardcollection'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), index=True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
flashcards = db.relationship('Flashcard', backref='collection', lazy='dynamic')
categories = db.relationship('Category',
secondary=has_category,
backref=db.backref('collections', lazy='dynamic'),
lazy='dynamic')
class Category(db.Model):
__tablename__ = 'category'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True, index=True)
has_category = db.Table('has_category',
db.Column('category_id', db.Integer, db.ForeignKey('category.id')),
db.Column('flashcardcollection_id', db.Integer, db.ForeignKey('flashcardcollection.id')))
我有以下表单类:
class FlashcardCollectionForm(FlaskForm):
name = StringField('Collection name', validators=[DataRequired()])
category = SelectField('Category', choices=[])
submit = SubmitField('Add')
通过这个表格,我将添加一个新的抽认卡集合。我还将允许用户在创建集合时为抽认卡集合添加一个新类别。
查看函数如下(现在什么都没做)
@main.route('/add-collection', methods=['GET', 'POST'])
@login_required
def add_collection():
form = FlashcardCollectionForm()
if form.validate_on_submit():
flash('Flashcard Collection added.')
return redirect(url_for('.index'))
return render_template('add_collection.html', form=form)
在此视图函数中,将创建新的 Flashcardcollection 并将其添加到数据库中。
这是模板:
{% block page_content %}
<div class="page-header">
<h1>Add a new Flashcard Collection</h1>
</div>
<div class="col-md-4">
<form action="#" method="post">
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name(size=20) }}
{{ form.category.label }} {{ form.category(id="test") }}
<button>Add</button>
<input type="submit" value="Go">
</form>
</div>
{% endblock %}
单击添加按钮应提示用户输入新类别。然后应将此类别添加到数据库并显示在选择字段中。 单击提交按钮应将抽认卡集合添加到数据库中。
问题是第一部分。如何在创建新的抽认卡集合时动态添加新类别?有没有没有 Javascript 的解决方案,或者我应该使用 javascript。如果是,函数的外观如何?
【问题讨论】:
标签: python flask flask-sqlalchemy wtforms flask-wtforms