首页 > 解决方案 > 如何在 Flask 中使用单个 html 页面在我的选项卡中放置不同的路由?

问题描述

我有一页内容不同。我使用 JQuery 来隐藏和显示选项卡的内容。然后,当我尝试{{ url_for() }}将函数放入 href 时,我总是得到IntegrityError.

html代码:

            <li class="item">
                <a href="{{ url_for('user') }}" class="menu-btn overview-btn">
                    <i class="fas fa-desktop"></i><span>Overview</span>
                </a>
            </li>
            <li class="item" id="profile">
                <a href="#" class="menu-btn budgets-btn">
                    <i class="fas fa-coins"></i><span>Budgets</span>
                </a>
            </li>

正在工作,{{ url_for('user') }}但是当我输入{{ url_for('add_budgets') }}它时出现错误。

路线.py:

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

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

模型.py

from datetime import datetime
from main import db, login_manager
from flask_login import UserMixin

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(20), nullable=False)
    current_budget = db.relationship('Budgets', backref='user_budget', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"

class Budgets(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    budgets = 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.budgets}')"

class Expenses(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    categories = db.Column(db.String(20), nullable=False)
    category_cost = db.Column(db.Integer, nullable=False)
    category_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    expense_id = db.Column(db.Integer, db.ForeignKey('budgets.id'), nullable=False)

    def __repr__(self):
        return f"Expenses('{self.categories}', '{self.category_cost}')"

错误:

db.session.commit()

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: budgets.budgets
[SQL: INSERT INTO budgets (budgets, date_posted, budget_id) VALUES (?, ?, ?)]
[parameters: (None, '2021-03-10 13:11:45.433302', 1)]

即使我已经有预算,争论的预算也没有。

标签: pythonflask

解决方案


打印将您尝试放入数据库的所有值。并验证是否满足您的数据库模型中的标准要求。

我注意到的一件事是您应该将您的 id 作为您的第一个参数,并将其称为“id”而不是“budget_id”


推荐阅读