AttributeError:'int'objecthasnoattribute'_sa_instance_state'=>flask+sqlalchemy+many-to-many+WTFSelectMultipleField
创始人
2024-09-21 23:02:32
0

这个错误可能是因为使用不正确的查询,以及尝试在 Int 实例上设置实例状态。解决方法是确保你正在正确查询对象,并在选择多个字段中使用字符串而不是整数作为值。或者,如果你真的想使用整数,请首先将其转换为字符串。下面是使用 Flask,SQLAlchemy 和 WTF SelectMultipleField 的示例代码,可以帮助避免这个错误:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from wtforms import SelectMultipleField, widgets

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

association_table = db.Table('association', db.Model.metadata,
    db.Column('student_id', db.Integer, db.ForeignKey('student.id')),
    db.Column('class_id', db.Integer, db.ForeignKey('class.id'))
)

class Student(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    classes = db.relationship('Class', secondary=association_table, backref=db.backref('students', lazy='dynamic'))

class Class(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

class MultiCheckboxField(SelectMultipleField):
    widget = widgets.ListWidget(prefix_label=False)
    option_widget = widgets.CheckboxInput()

@app.route('/', methods=['GET', 'POST'])
def index():
    form = StudentForm(request.form)
    form.classes.choices = [(str(c.id), c.name) for c in Class.query.all()]
    if request.method == 'POST' and form.validate():
        student = Student(name=form.name.data)
        for class_id in form.classes.data:
            student.classes.append(Class.query.get(int(class_id)))
        db.session.add(student)
        db.session.commit()
    students = Student.query.all()
    return render_template('index.html', form=form, students=students)

class StudentForm(FlaskForm):
    name = StringField('Name')
    classes = MultiCheckboxField('Classes')

if __name__ ==

相关内容

热门资讯

iwatch怎么连接安卓系统,... 你有没有想过,那款时尚又实用的iWatch,竟然只能和iPhone好上好?别急,今天就来给你揭秘,怎...
安卓系统怎么连不上carlif... 安卓系统无法连接CarLife的原因及解决方法随着智能手机的普及,CarLife这一车载互联功能为驾...
oppo手机安卓系统换成苹果系... OPPO手机安卓系统换成苹果系统:现实吗?如何操作?随着智能手机市场的不断发展,用户对于手机系统的需...
iphone系统与安卓系统更新... 最近是不是你也遇到了这样的烦恼?手机更新系统总是失败,急得你团团转。别急,今天就来给你揭秘为什么iP...
安卓平板改windows 系统... 你有没有想过,你的安卓平板电脑是不是也能变身成Windows系统的超级英雄呢?想象在同一个设备上,你...
安卓系统上滑按键,便捷生活与高... 你有没有发现,现在手机屏幕越来越大,操作起来却越来越方便了呢?这都得归功于安卓系统上的那些神奇的上滑...
安卓系统连接耳机模式,蓝牙、有... 亲爱的手机控们,你们有没有遇到过这种情况:手机突然变成了“耳机模式”,明明耳机没插,声音却只从耳机孔...
希沃系统怎么装安卓系统,解锁更... 亲爱的读者们,你是否也像我一样,对希沃一体机上的安卓系统充满了好奇呢?想象在教室里,你的希沃一体机不...
安装了Anaconda之后找不... 在安装Anaconda后,如果找不到Jupyter Notebook,可以尝试以下解决方法:检查环境...
安卓换鸿蒙系统会卡吗,体验流畅... 最近手机圈可是热闹非凡呢!不少安卓用户都在议论纷纷,说鸿蒙系统要来啦!那么,安卓手机换上鸿蒙系统后,...