Append entry to FieldList with Flask-WTForms using AJAX

后端 未结 3 1573
遥遥无期
遥遥无期 2020-12-18 04:59

I made a simple form in Flask using Flask-WTForms where a parent can register itself and his children. The parent can register as many children as he wants, by clicking on t

3条回答
  •  鱼传尺愫
    2020-12-18 05:37

    I think this should work. Barring any typos.

    views.py

    ########
    # SET UP YOUR FLASK APP HERE
    ########
    
    from flask_wtf import FlaskForm
    from wtforms_alchemy import model_form_factory
    
    class Family(db.Model):
        id = db.Column('id', db.Integer, primary_key=True)
        name = db.Column(db.String(500), info={'label': 'Familyname', 'validators': DataRequired()})
    
    class Member(db.Model):
        id = db.Column('id', db.Integer, primary_key=True)
        name = db.Column(db.String(500), info={'label': 'Member', 'validators': DataRequired()})
    
    
    BaseModelForm = model_form_factory(FlaskForm)
    
    class ModelForm(BaseModelForm):
        @classmethod
        def get_session(self):
            return db.session
    
    class MemberForm(ModelForm):    
    
        class Meta:
            model = Machine
    
    
    class MemberEditForm(MemberForm):
        pass
    
    class MainForm(ModelForm):
    
        add_member = SubmitField('+ Member')
        members = ModelFieldList(FormField(MemberForm))
        class Meta:
            model = Family
    
    
    
    @app.route('/form')
    def main_form():
    
        family = Family()
        form = MainForm(obj=family)
    
        if form.add_member.data:
            getattr(form,'members').append_entry()
            return render_template('form.html', form=form)
    
        if form.validate_on_submit():
            form.populate_obj(family)
            db.session.add(order)
            db.session.commit()
    
        return render_template('form.html', form=form)
    
    
    @app.route('/process_add_member', methods=['POST'])
    def add_member():
        form = MainForm()
    
        getattr(form,'members').append_entry()
    
        return render_template('members.html', form=form)
    

    form.html

    
    
    
    
    {{ form.hidden_tag() }} {{ form.name.label }} {{ form.name }}
    {% include 'members.html' %}
    {{ form.add_member(id="add-member") }}

    members.html

    Members
    {% if form.members%}
        
    Name
    {% endif %} {% for member in form.members %}
    {% for field in member %}
    {{ field(class="form-control") }}
    {% endfor %}
    {% endfor %}

提交回复
热议问题