python - SQLAlchemy:“InstrumentedList”对象没有属性/错误请求浏览器(或代理)发送了此服务器无法理解的请求
问题描述
我SQLALchemy
在应用程序中使用多个表单将项目添加到菜单中Flask
,如下所示:
# query by user
user = User.query.filter_by(restaurant=session['user']).first()
# if user does not have a menu, create one
if user.menu == []:
menu = Menu()
db.session.add(menu)
db.session.commit()
else:
user = User.query.filter_by(restaurant=session['user']).first()
menu = user.menu
#item 1
try:
add = request.form['dish']
dish = Dish()
db.session.add(dish)
dish.name = add
db.session.commit()
# add dish to menu
menu.dishes.append(dish)
# add menu to user
user.menu.append(menu)
db.session.commit()
print (menu, user)
except Exception as e:
print str(e)
#item 2
try:
add2 = request.form['dish']
dish = Dish()
db.session.add(dish)
dish.name = add2
db.session.commit()
# add dish to menu
menu.dishes.append(dish)
# add menu to user
user.menu.append(menu)
db.session.commit()
print (menu, user)
except Exception as e:
print str(e)
等等。
首先menu
打印user
:
<Dishes [<ID 1>, <Name u'pasta'>]>
<ID 1>, <User u'Suplicy'>, <Username u'me'>, <Email u'me@mac.com'>, <Menu [<Dishes [<ID 1>, <Name u'pasta'>]>]>
但第二个menu
并向user
我抛出错误:
'InstrumentedList' 对象没有属性 'dishes'
并且,在第二次提交时:
错误请求 浏览器(或代理)发送了此服务器无法理解的请求
模型.py
class User(db.Model):
__tablename__='user'
id = db.Column(db.Integer, primary_key=True)
restaurant = db.Column(db.String(50))
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
address = db.Column(db.String(30), unique=True)
menu = db.relationship("Menu",
backref=db.backref('user'),
uselist=True)
class Menu(db.Model):
__tablename__='menu'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
dishes = db.relationship('Dish',
back_populates='menu',
uselist=True)
class Dish(db.Model):
__tablename__='dish'
menu_id = db.Column(db.Integer, db.ForeignKey('menu.id'))
menu = db.relationship('Menu',
back_populates='dishes')
为什么会出现错误,为什么仅在提交第二个表单时才抛出?
解决方案
以下链接要求您更改
uselist=False in backref
。
AttributeError:“InstrumentedList”对象没有属性
还有许多其他类似问题的stackoverflow问题。请通过它们。
编辑: 另外,我认为模型菜单和菜有多对多的关系。你能检查文档http://flask-sqlalchemy.pocoo.org/2.3/models/中的多对多关系模型格式吗
推荐阅读
- spring-boot - spring boot 从自定义文件夹加载属性文件
- javascript - JS 连接默认是逗号?
- api - 电动滑板车扫描流程如何工作?
- c# - Pass values between methods C# MVC
- python - 根据条件消除数据框中的行
- ansible - Ansible AWX/Tower - 访问另一个游戏中保存为工件的变量
- java - JavaFX:监听场景变化
- python-3.x - 在我的二进制搜索算法中,Python 在列表中找不到 0 个索引成员
- python - Python asyncio:错误是我还是 API?
- javascript - 按星期几分组包含商店营业时间的对象