【问题标题】:Why the data of my form not adding to my database in flask-sqlalchemy and jinja template?为什么我的表单数据没有添加到我在 flask-sqlalchemy 和 jinja 模板中的数据库中?
【发布时间】:2021-03-04 08:24:11
【问题描述】:

我有一个功能,当你点击按钮时,它会显示一个表单,然后它会添加一张包含提交表单数据的卡片。

routes.py:

@app.route("/user", methods=['GET', 'POST'])
@login_required
def user():
    form = BudgetForm()
    budgets = Budgets.query.all()
    return render_template("user.html", title=current_user.username, form=form, budgets=budgets)

@app.route("/add_budgets", methods=['GET', 'POST'])
def add_budgets():
    form = BudgetForm()
    if form.validate_on_submit():
        budget = Budgets(budget=form.budget.data)
        db.session.add(budget)
        db.session.commit()
        return redirect(url_for('user'))
    return render_template("user.html", form=form)

forms.py:

class BudgetForm(FlaskForm):
    budget = IntegerField('Budget', validators=[DataRequired(), NumberRange(min=100, max=1000000)])
    submit = SubmitField('Submit')

models.py:

class Budgets(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    budget = db.Column(db.Integer, nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    budget_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    expense = db.relationship('Expenses', backref='budget_expenses', lazy=True)

    def __repr__(self):
        return f"Budgets('{self.budget}')"

user.html:

<div class="dash-cards">
                {% for budget in budgets %}
                    <div class="card-single"> 
                        <div class="card-body"> 
                            <span class="fas fa-coins"></span> 
                            <div> 
                                <h5>{{ budget.date_posted.strftime('%Y-%m-%d') }}</h5> 
                                <h4>{{ budget.budget}}</h4>
                            </div> 
                        </div> 
                        <div class="card-footer"> 
                            <a href="">Add Expenses</a> 
                        </div> 
                    </div>
                {% endfor %}
            </div>

            <div class="popup">
                <div class="popup-content">
                    <form action="{{ url_for('add_budgets') }}" method="POST">

                        <div>
                            {{ form.budget.label(class="form-control-label", id="txt") }}
                            {{ form.budget(class="form-control") }}
                        </div>
                        <div class="form-group">
                            {{ form.submit(class="btn btn-outline-info" )}}
                        </div>
                    </form>
                </div>
            </div>
        </main>
    </div>

我也在命令行中查询,但没有任何显示。提交表单时没有错误。

【问题讨论】:

    标签: flask sqlalchemy jinja2


    【解决方案1】:

    我认为您应该重构您的 add_budgets() 函数,使其看起来更像这样:

    def add_budgets():
        form = BudgetForm()
        if request.method == "POST":
            if form.validate_on_submit():
                budget = Budgets(budget=form.budget.data)
                if budget:
                    db.session.add(budget)
                    db.session.commit()
                    return redirect(url_for('user'))
                else:
                    # budget didn't get created
                    print("budget is {}".format(budget))
                    return render_template("user.html", form=form)
        else:
            return render_template("user.html", form=form)
    

    我没有尝试代码的怀疑是您的预算对象没有被创建budget = Budgets(budget=form.budget.data)。我希望这可以帮助你弄清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2013-02-22
      • 2019-05-03
      相关资源
      最近更新 更多