Python 添加条目以选择字段表单

Python 添加条目以选择字段表单,python,flask,flask-sqlalchemy,wtforms,flask-wtforms,Python,Flask,Flask Sqlalchemy,Wtforms,Flask Wtforms,我有以下数据库模型: 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=date

我有以下数据库模型:

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')
使用此表单,我将添加一个新的抽认卡集合。此外,我将允许用户在创建收藏时为Flashcard收藏添加新类别

查看功能如下(目前未执行任何操作)

在此视图函数中,将创建新的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 %}
{%block page\u content%}
添加新的抽认卡集合
{{form.csrf_token}
{{form.name.label}{{form.name(size=20)}
{{form.category.label}{{form.category(id=“test”)}
添加
{%endblock%}
单击Add按钮应提示用户输入新类别。然后,应将该类别添加到数据库并显示在选择字段中。 单击Submit按钮可以将Flashcard集合添加到数据库中


问题是第一部分。如何在创建新的抽认卡收藏时动态添加新类别?有没有不使用Javascript的解决方案,或者我应该使用Javascript。如果是,函数看起来如何?

使用
flask\u sqlalchemy
可以轻松创建模型并填充选择标记。接下来添加
\uuuu init\uuuu
方法以形成类以填充数据库中的值:

class FlashcardCollectionForm(FlaskForm):
    ...
    def __init__(self, *args, **kwargs):
        super(FlashcardCollectionForm, self).__init__(*args, **kwargs)
        self.category.choices = [(card.id)(card.category) for card in Card.query.all()]
使用
\uuuuu init\uuuuuu
,我们为选择字段“所有来自数据库”设置选项。 最后,要保存条目,请执行以下操作:

def add_collection():
   form = FlashcardCollectionForm()
   if request.method == 'POST':
       c = Category(name=form.name.data)
       f = FlashcardCollection(...)
       has_category(category_id=c.id, flashcardcollection_id=f.id)
       db.session.add_all([c, f])
       db.session.commit()

谢谢你的回答。我已经编辑了这个问题,并添加了一些额外的信息来澄清这个问题。我希望在创建与类别具有外键关系的数据库对象时动态添加新类别。在if block while方法为post的情况下创建类别实例,并将表单数据作为其参数传递,然后使用此类别实例
def add_collection():
   form = FlashcardCollectionForm()
   if request.method == 'POST':
       c = Category(name=form.name.data)
       f = FlashcardCollection(...)
       has_category(category_id=c.id, flashcardcollection_id=f.id)
       db.session.add_all([c, f])
       db.session.commit()