![](/img/trans.png)
[英]Flask. sqlalchemy.exc.InterfaceError: <app.models.Menu object at 0x7f287026dd10>
[英]KeyError: <weakref at 0x7f37bb9587c0; to 'Flask' at 0x7f37be04ef20>
我創建了一個 Flask 應用程序,使用 SQLite、SQLAlchemy 和 WTForms。 我的目標是創建分類類別樹以供站點用戶使用 HTML forms 喜歡:1 類別 1 子類別 2 子類別.... 2 類別....
我在表單中遇到 WTForms QuerySelectField問題 (forma.validate_on_submit():)。 打開表單頁面后,報錯:KeyError : <weakref at 0x7f37bb9587c0; 到 0x7f37be04ef20 處的“燒瓶”>
詳細3個文件: mainrun.py
from flask import Flask, render_template, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import formsrun
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
app = Flask(__name__)
app.config['SECRET_KEY'] = 'xxxxx'
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///todobudjet34.db"
db = SQLAlchemy(app)
class CategoryGroup(db.Model):
__tablename__ = "category_group"
id = db.Column(db.Integer, primary_key=True)
category_group = db.Column(db.String(200), unique= True)
category_add = db.relationship("MyCategory")
class MyCategory(db.Model):
__tablename__ = "mycategory"
id = db.Column(db.Integer, primary_key=True)
cat_gr_id = db.Column(db.Integer, db.ForeignKey('category_group.id'))
my_category_name = db.Column(db.String(200), unique = True)
my_sub_category_add = db.relationship("SubCategory")
my_sub_directory_cat_add = db.relationship("SubDirectoryCat")
with app.app_context():
db.create_all()
@app.route("/")
def index():
return render_template("index.html")
@app.route("/categories")
def categories():
try:
categories = MyCategory.query.all()
except:
categories = []
return render_template("categories.html", categories=categories)
@app.route("/newcategory", methods=["GET", "POST"])
def newcategory():
db.create_all()
forma = formsrun.CategoryForm()
if forma.validate_on_submit():
category = MyCategory(cat_gr_id=forma.category_group_source.data.id, my_category_name=forma.my_categ.data)
db.session.add(category)
db.session.commit()
return redirect(url_for('categories'))
return render_template("newcategory.html", form=forma)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8050, debug=True)
形式運行.py :
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField, SelectField, FloatField
from wtforms.validators import DataRequired, Email, InputRequired
from wtforms_sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField
import mainrun
def get_pk(obj):
return str(obj)
def category_group_query():
return mainrun.CategoryGroup.query
def category_query():
return mainrun.MyCategory.query
class CategoryGroupForm(FlaskForm):
my_category_group = StringField('My category group name', [DataRequired ()])
submit = SubmitField("Enter")
class CategoryForm(FlaskForm):
category_group_source = QuerySelectField(query_factory=category_group_query, get_label="category_group", get_pk=get_pk)
my_categ = StringField('My category name', [DataRequired()])
submit = SubmitField("Enter")
新類別.html
{% extends "base.html" %} {% block content %}
<form method="post" action="#">
{{ form.hidden_tag() }}
<div class="form-group">
{{ form.category_group_source.label(class="form-control-label") }} {{
form.category_group_source(class="form-control") }}
</div>
<div class="form-group">
{{ form.my_category.label(class="form-control-label") }} {{
form.my_category(class="form-control") }}
</div>
{{ form.submit }}
</form>
{% endblock %}
我知道問題出在這里:mainrun.py 中的 category = MyCategory(cat_gr_id=forma.category_group_source.data.id, my_category_name= forma.my_categ.data ) 和 formsrun.py 中的query_factory
但無法解決此問題,請幫助解決此問題:)
看起來你升級到 SQLAlchemy 3 但你正在使用 SQLAlchemy 2 的 init 例程。
參見https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/api/
在 3.0 版更改:引擎是在調用 init_app 時創建的,而不是在第一次訪問時創建的。
您需要調用db.init_app(app)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.