python - 如何在 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)]
即使我已经有预算,争论的预算也没有。
解决方案
打印将您尝试放入数据库的所有值。并验证是否满足您的数据库模型中的标准要求。
我注意到的一件事是您应该将您的 id 作为您的第一个参数,并将其称为“id”而不是“budget_id”
推荐阅读
- python - 如果 python 函数返回多个值,我该如何使用它的返回值?
- c# - C#冒泡排序函数返回数据类型而不是结果?代码问题或文件设置?
- c# - 程序世界生成无法处理大地图
- ruby - 安装 ruby jmeter 脚本时出错
- javascript - 使用 MutationObserver 时获取当前 MutationRecord 的新属性值?
- google-chrome - 多个 Chromebook 上的实验性 API 设置
- mediarecorder - 我无法转发和查看 RecordRTC 中记录的文件长度
- vue.js - 测试nuxt + vue + markdown
- python-requests - 无法在 Mocrosoft Graph 中移动 DriveItem
- sql - 比较没有年份的 DATE